文字列配列を繰り返しながら、値の1つに対していくつかの異なる操作を実行したいと思います。すべての要素に対して文字列比較が失敗します。
arr[0]='red'
arr[1]='blue'
arr[2]='yellow'
arr[3]='green'
## now loop through the above array
for i in "${arr[@]}"
do
if [ "$i"="green" ];
then
echo "i('$i') is equal to green"
else
echo "i('$i') is not equal to green"
fi
done
私も試しました(同じ結果):
if [ "$i"='green' ];
そして
if [ $i='green' ];
そして
if [ $i="green" ];
上記の各項目の出力:
i('red') is equal to green
i('blue') is equal to green
i('yellow') is equal to green
i('green') is equal to green
比較で私が何を間違っているのだろうか?
答え1
空白がありません。
[ $i="green" ]
方法[ -n $i=green ]
あなたはする必要があります
[ "$i" = green ]
でも
[ green = "$i" ]
これにも当てはまりますi=-n
。
別のシェルに移植する必要がない場合は、bashで角括弧を使用できます。
[[ $i = green ]]
引用符は必要ありません(実際には右側に拡張を防ぐ特別な意味があります)。==
代わりに使用することもできます=
。
答え2
=
比較演算子の周囲にはスペースが必要です。
if [ "$i" = "green" ];
答え3
周囲のスペースが必要なのは、コマンドが渡す引数の数によって異なる操作を実行する=
ためです。単一の引数()のみを渡す場合、文字列が空でない場合、結果はtrueです。[
test
[ "$i"=green ]
あなたのコードと出力が一致しません。あなたが投稿したコードに応じて、各色は次のようになります。i('colour') is equal to green
答え4
[ green = "$i" ]
printf "( '%s' ) is %.$?0sequal to green.\n" "$i" "not "
...それも動作します。