OR演算子が$ 1で機能しないという問題があります。たとえば、
if [[ "$1" != '1' || '2' ]]
then
echo "BAD"
else
echo "OK"
fi
このテストを実行すると、$1が何であれ常にBADが発生します。
1ドルを1または2でどのように結び付けることができますか?
ベストアンサー1
標準sh
構文の使用(したがって、bash
他のすべてのPOSIX互換シェルで認識されます):
case $1 in
(1 | 2) echo OK;;
(*) echo BAD;;
esac
または:
if [ "$1" = 1 ] || [ "$1" = 2 ]; then
echo OK
else
echo BAD
fi
(これは文字列のバイト間比較です1
。
コンストラクタ=
(コピー)の/演算子は、実際には等価演算子ではなく、パターン一致演算子です。したがって、この特別な場合に単一の文字を一致させたい場合は、その項目で使用されている標準構文のようにこれを行うこともできます。方法。!=
bash
[[...]]
ksh
[[ $1 != [12] ]]
case $1 in ([12])
sh