2016-03-28 4 views
0

これらの2つのコードスニペットを実行します.1つはコロン等価表記を使用し、もう1つはダブルブラケットプログラムを使用して同じ動作を示しますか?動作上の違いはありますか?=と[[?

: "${foo:=bar}" 

if ! [[ $foo ]]; then 
    foo=bar 
fi 

彼らは行動に同じ場合、どちらが文体好ましいですか?私はこれらの両方がさまざまな場所で使用されているのを見てきましたが、どちらが保守性と可読性に優れているかを判断することはできません。

答えて

2

私の知る限り、それらは機能的に同等です。最高のものは、それは味の問題だと思います。個人的には、より簡潔なので: ${foo:=bar}を好むでしょうが、構文にあまり慣れていない人はもっと明白なアプローチに行くでしょう。

最初のアプローチでは標準のシェル機能が使用されるため、POSIX準拠のシェルで動作する必要があります。 2番目のアプローチをより移植性を持たせるために、私は一緒に行くつもりです:

if [ -z "$foo" ]; then 
    foo=bar 
fi 
+0

'if! ["$ foo"]; POSIXにも準拠しています。 – chepner

関連する問題