同僚が最近コードレビューで、次のような構文より[[ ]]
もこの構文が優先されると主張しました。[ ]
if [ "`id -nu`" = "$someuser" ] ; then
echo "I love you madly, $someuser"
fi
彼は根拠を示せませんでした。根拠はあるのでしょうか?
ベストアンサー1
[[
驚きが少なく、一般的に使用しても安全です。しかし、移植性はありません。POSIXではそれが何をするかは規定されておらず、一部のシェルのみがサポートしています(bashのほかに、kshもサポートしていると聞きました)。たとえば、次のようにします。
[[ -e $b ]]
ファイルが存在するかどうかをテストします。しかし[
、 では、 を引用符で囲む必要があります。$b
これは、引数を分割して、 などのものを展開するためです"a*"
(ここで[[
は、 はそれを文字通り受け取ります)。これは、 が外部プログラムであり、他のすべてのプログラムと同様に通常どおり引数を受け取ることができる方法にも関係しています[
(組み込みの場合もありますが、その場合もこの特別な処理はありません)。
[[
また、C 系言語で知られているような演算子を使用した正規表現マッチングなど、他の優れた機能もいくつかあります=~
。これについては次のページが参考になります:[
testとの違いは何ですか[[
?そしてBash テスト