Open6
シェルスクリプトで「配列に値が含まれているかどうか」確認したい
100万回は車輪の再開発が行われてそうだけども
コメント欄を見ながら試してみる
macOS 10.15.7 Catalina で sh test.sh
を実行して確認
array=('apple' 'orange' 'banana' 'peach')
echo ${array[@]} | xargs -n 1 | grep -E "^orange$" > /dev/null
if [ $? -eq 0 ]; then
echo "Orange exists."
else
echo "Orange does not exist."
fi
これはOK
一方で関数にしようとするとうまくいかない
function check_array() {
arr=$2
echo ${arr[@]} | xargs -n 1 | grep -E "^${1}$" > /dev/null
return $?
}
array=('apple' 'orange' 'banana' 'peach')
if [ $(check_array "orange" $array) ]; then
echo "Orange exists."
else
echo "Orange does not exist."
fi
ただ、関数の書式とかが違っている気がする
function check_array() {
arr=$2
echo ${arr[@]} | xargs -n 1 | grep -E "^${1}$"
#printf "%s\n" ${arr[@]} | grep -x "${1}"
}
array=('apple' 'orange' 'banana' 'peach')
word="peach"
if test -n "$(check_array "${word}" "${array[*]}")" ; then
echo "${word} exists."
else
echo "${word} does not exist."
fi
shell の関数、ちょっと時間かけないと理解できない程度には難しい...
しばらくこのテンプレ使い回すかな...
array=('apple' 'orange' 'banana' 'peach')
echo ${array[@]} | xargs -n 1 | grep -E "^orange$" > /dev/null
if [ $? -eq 0 ]; then
echo "Orange exists."
else
echo "Orange does not exist."
fi
複数条件用
なんかものすごーーくコレジャナイ感じがするけど
arrayone=('apple' 'orange' 'banana' 'peach')
echo ${arrayone[@]} | xargs -n 1 | grep -E "^orange$" > /dev/null
res1=$?
arraytwo=('foo' 'bar' 'baz')
echo ${arraytwo[@]} | xargs -n 1 | grep -E "^bar$" > /dev/null
res2=$?
if [ $res1 -eq 0 ]; then
echo "Orange exists."
elif [ $res2 -eq 0 ]; then
echo "bar exists."
else
echo "Orange or bar does not exist."
fi