前提
配列array
にorange
に含まれているかどうかを判定するスクリプトです。
いくつかコードがありますが急いでいる人は結論へどうぞ
コード
array=('apple' 'orange' 'banana' 'peach')
check_array() {
local i
for i in ${array[@]}; do
if [[ ${i} = ${1} ]]; then
return 0
fi
done
return 1
}
if check_array "orange"; then
echo "Orange exists."
else
echo "Orange does not exist."
fi
解説
check_arrayについて
for
で配列の文字を1つずつ比較し、引数に渡された値と同一の値があればその時点でtrue
を出力して終了します。
もしfor
が終了したらその時点で値が存在していないことになるのでfalse
を出力して終了します。
if以降について
あとはcheck_array
を実行して値を比較しているだけです。
もっといい方法が合った
コメントにて教えていただきました
if [[ $(printf '%s\n' "${array[@]}" | grep -qx "orange"; echo -n ${?} ) -eq 0 ]]; then
echo "Orange exists."
else
echo "Orange does not exist."
fi
教えてもらったコードを修正
終了コードの判定なのでこっちのほうがいいよっていう
grepのオプションを編集すれば条件を正規表現とかでいい感じにできるはず
if printf '%s\n' "${array[@]}" | grep -x "orange" > /dev/null >&2; then
echo "Orange exists."
else
echo "Orange does not exist."
fi
さらに修正
grepの-q
オプションという存在を知ったのでもっと短くなった
if printf '%s\n' "${array[@]}" | grep -qx "orange"; then
echo "Orange exists."
else
echo "Orange does not exist."
fi
最後に
もしもっと良い方法があれば教えて下さい