シェル引数を文字列と比較すると、このエラーが発生します。コードが次の場合:
online=true
if [ "$2" -eq '-o' ]
then
online=false
fi
echo $online
次に、入力、例えば次のような結果が得られる。
$ ./currency.sh 2 -o
./currency.sh: line 13: [: -o: integer expression expected
true
答え1
この行では:
if [ "$2" -eq '-o' ]
-eq
2番目の引数を数値として使用する算術演算子を使用しました。
もちろん、その理由だけで失敗しました。
文字列を比較するときは、次を使用できます。POSIX =
オペレーター:
if [ "$2" = '-o' ]
このバージョンは次のように作成されたため、すべてのシェルで動作する必要があります。POSIX(ポータブルオペレーティングシステムインタフェース)。
欲しいなら吹く-特定バージョン:
if [[ "$2" == '-o' ]]
このバージョンは以下でのみ動作します。Bash (Bourne Identity シェル)そして似ています。
対照的に、二重角括弧[[ .. ]]
と==
演算子は次のように定義されています。吹く他のシェルでは動作しません。