Bash

Snippets

重複排除してソート

-u で重複排除する。

#!/bin/bash
fruits=(
  "banana"
  "apple"
  "banana"
  "lemon"
  "apple"
)
fruits=($(for v in "${fruits[@]}"; do echo "$v"; done | sort -u ))
for fruit in "${fruits[@]}"; do
  echo $fruit
done

apple
banana
lemon

キーを指定して数値降順にソート

-k 2 -t @@ をデリミタとして 2 列目をキーとする。-n -r で数値降順にソートする。

#!/bin/bash
members=(
  "Taro=engineer@35"
  "Jiro=dentist@30"
  "Saburo=lawyer@25"
  "Shiro=chef@40"
)
members=($(
  for v in "${members[@]}"; do
    echo "$v"
  done | sort -k 2 -t @ -n -r
))
for member in "${members[@]:0:3}"; do
  name=${member%=*}
  occupation=${member#*=}
  occupation=${occupation%@*}
  age=${member#*@}
  echo $name $occupation $age
done

Shiro chef 40
Taro engineer 35
Jiro dentist 30

正規表現マッチ

[[ ... =~ ... ]] で正規表現マッチを判定できる。

#!/bin/bash
command="bash -c 'source ~/.claude/scripts/ask.sh' 1"
pattern="^bash -c 'source ~/\.claude/scripts/ask\.sh'"
if [[ "$command" =~ $pattern ]]; then
  echo "OK"
else
  echo "NG"
fi

OK