2011-09-16 8 views
55

私はa nullのように動作するbashのコロン演算子を理解していますが、それはparameter expansionで使用されていることと他の方法で使用されていますが、 :

: ${SOMETHING='value'} 

の実験から、私は、これは'value'に環境変数$SOMETHINGを設定しますが、なぜことを知っていますか?

"これは正しい"と答えていますが、その文書(私が見つけることはできません)またはこの使用法の適切な名前が役に立ちます。私はもっ​​と啓発的な説明があることを望んでいる。

+1

'こと注:'組み込みは、Bourneシェルとkshのならびにbashで存在します。 – ghoti

答えて

60

この式では、SOMETHINGがvalueに設定されていない場合は、この値が設定されます。これは多くの状況にある便利な演算子です。しかし、それはまた、割り当てられた値を返すので、あなたは、単に

${SOMETHING='value'} 

を実行した場合、あなたのシェルはコマンドvalueを起動しようとするだろう。これは望ましくないことをするかもしれないし、しないかもしれない。少なくとも、 "value:command not found"というメッセージをスローします。

これを避けるには、no-を使用します。これは、その引数を評価し、それを実行するのではなく、投げ捨てます。

+9

':'組み込みコマンドは、[here](http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins)で文書化されています。また、[POSIX標準](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#colon)です。 –

+3

[こちら](http://www.tldp.org/LDP/abs/html/special-chars.html#COLON0REF)についても説明しています。 –

5

は、ここで説明:http://tldp.org/LDP/abs/html/parameter-substitution.html

をパラメータが設定されていない場合は、デフォルトに設定します。

どちらのフォームもほぼ同等です。 :は、 $パラメータが宣言されていて、上記の[1]がnullの場合にのみ違いがあります。

echo ${var=abc} # abc 
echo ${var=xyz} # abc 
# $var had already been set to abc, so it did not change. 
+2

私はhttp://wiki.bash-hackers.org/syntax/peまたはhttp://mywiki.wooledge.org/BashFAQ/073(とそのリンク)をABSよりも優れた参考書として提案しています(これは慢性的に不十分ですその例では悪い習慣を示す傾向があります)。 –