私は見た
if cmd
then
echo Hi
fi
働く方法は昔とは異なります
if [[ $(cmd) ]]
then
echo Hi
fi
それでは、[[があり、[[がなければどうなりますか?
答え1
シェルでは、[
テストコマンドのエイリアスです。それはい注文する。これは[[
いくつかのシェルの特徴ですが、少し異なります。 Bashでは、コマンドではなくキーワードですが、コマンドのように機能します。
次のように考えることができます。[[
「$(cmd)」の出力をそのコマンドの引数として実行して提供しています。if
その後、返品状況を確認してください[[
。演算子が提供されない場合[[
、-n
が暗示されます。
-n string
True if the length of string is non-zero.
たとえば、
if cmd # check the return status of cmd
if [[ $(cmd) ]] # check if cmd has any output
答え2
括弧のないステートメントはbashコマンドで評価され、if expr
戻り状態を確認します。expr
成功すると価値と見なされますtrue
。
一方、if [[ expr ]]
二重角かっこがある項目はbash
具体的です。キーワード-f /path/to/file
ファイルが存在するかどうかをテストするなど、独自のオプションセットを処理したり、たとえば変数テストも処理したりできます$a == $b
。if [[ $(cmds) ]]
それ以外の場合は、そこにあるすべてを特別な式で処理し、別の方法で解析します。
if [ expr ]
一般に、別名(または場合によってはおおよその実装)である構文もありますif test expr
。コマンドに使用可能なオプションがある場合は、単一の角かっこの間にもtest
使用できます。
より興味深くするためif ((expr))
に、内部のすべてが算術式として評価されるため、数字で作業するときに最適な構文があります。これは二重括弧と同様にキーワードです。
デフォルトでは、if expr
andif [ expr ]
は移植可能であり(つまり、すべてのシェルはそれを処理してほぼ同じように処理できます)、実装if [[ expr ]]
によってif (( expr ))
異なります。つまり、キーワードであり、評価はシェルを使用する場所によって大きく異なります(使用している場合は存在しない可能性があります)。bash
、、、zsh
または)などを使用しないでください。ksh