1. ホーム
  2. bash

[解決済み] Bashでは、一重の角括弧[ ]よりも二重の角括弧[[ ]]が好ましいのでしょうか?

2022-03-19 07:45:41

質問

最近、同僚がコードレビューで [[ ]] よりも優先されます。 [ ] のような構成で

if [ "`id -nu`" = "$someuser" ] ; then
     echo "I love you madly, $someuser"
fi

根拠を示せなかった。あるんですか?

解決方法は?

[[ は驚きが少なく、一般的に安全に使うことができます。しかし、移植性はありません。POSIXでは何をするのか規定されていませんし、一部のシェルしかサポートしていません(bashの他、kshもサポートしているそうです)。例えば

[[ -e $b ]]

を使って、ファイルが存在するかどうかをテストします。しかし [ を引用する必要があります。 $b のように、引数を分割して展開してしまうからです。 "a*" (ここで [[ は文字通りに受け取ります)。それはまた、どのように [ は外部プログラムでありながら、他のプログラムと同じように普通に引数を受け取ることができます(ただし、組み込みプログラムであることも可能ですが、その場合はこのような特別な扱いを受けることはありません)。

[[ を使った正規表現マッチングのような、他の素晴らしい機能もあります。 =~ と、C言語ライクな演算子で知られているような演算子で構成されています。これについては、以下のようなページがあります。 テストの違いは何ですか。 [[[ ? Bashのテスト