このようなものを再現したいと思います
if ( arg1 || arg2 || arg 3) {}
そして、私はこれまでのところ得ましたが、次のエラーが発生します:
line 11: [.: command not found
if [ $char == $';' -o $char == $'\\' -o $char == $'\'' ]
then ...
さまざまな方法を試しましたが、どれもうまくいかないようでした。私が試したもののいくつか。
このようなものを再現したいと思います
if ( arg1 || arg2 || arg 3) {}
そして、私はこれまでのところ得ましたが、次のエラーが発生します:
line 11: [.: command not found
if [ $char == $';' -o $char == $'\\' -o $char == $'\'' ]
then ...
さまざまな方法を試しましたが、どれもうまくいかないようでした。私が試したもののいくつか。
Bash の場合、[[ ]]
ではなくフォームを使用できます[ ]
。これにより&&
、||
内部的に次のことが可能になります。
if [[ foo || bar || baz ]] ; then
...
fi
それ以外の場合は、通常のブール論理演算子を外部で使用できます。
[ foo ] || [ bar ] || [ baz ]
...または、test
コマンドに固有の演算子を使用します ( POSIX 仕様の最新バージョンでは、この XSI 拡張機能は非推奨であると説明されていますが、アプリケーションの使用セクションを参照してください)。
[ foo -o bar -o baz ]
...これは、次の別の形式であり、同様に非推奨です。
test foo -o bar -o baz
チャールズの答えは、ステートメント内 (さらに言えばステートメントなし) でコマンドに対して論理演算を行う方法を示しているという点で正しいですが、ここでif
使用したいように見えcase
ます:
case $char in
\;|\\|\') echo found;;
*) echo 'not found';;
esac
bash では、[ ]
構文を使用して条件をグループ化するには、括弧を使用して各グループを囲む必要があります。各開き/閉じ括弧はエスケープし、前後に空白を付ける必要があります。下記参照:
if [ \( "$char" = "$;" \) -o \( "$char" = "$\\" \) -o \( "$char" = "$\" \) ]
そのため、他の人のアドバイスに従い、bash の新しい[[ ]]
構成を使用することが間違いなく最善です。最後に、私が理解しているように==
、算術式内で使用することを目的とした関係演算子です。すなわち -
$((3==4))
Cameron Newham と Bill Rosenblatt、「bash シェルの学習」1998 年 1 月