
電卓として機能する理由:
[root@qabun02 ~]# echo $(( 5+2 ))
7
しかし、そうではありませんか?
[root@qabun02 ~]# echo $( (5+2) )
-bash: 5+2: command not found
私が見ることができる唯一の違いは、括弧の間にスペースがないことです。
返品:
[root@qabun02 ~]# echo $(who) root pts/0 2015-01-28 09:53 (10.40.0.115) [root@qabun02 ~]# echo $((who)) 0
((
コマンド置換はおよびにどのように応答しますか( (
。
答え1
問題は、$(
コマンド置換が有効になっているが$((
算術拡張が有効になっていることです。
$( (5+2) )
コマンドです。つまり、サブシェルのコマンドです(5+2)
。5+2
しかし、これは有効なコマンドではありません。
$((who))
who
未定義の変数値(例:0)に置き換えられます。
答え2
バッシュから:
$(...)
サブコマンドの置換を示します(「...」に似ています)。
$((...))
算術評価の置換を表します。
${...}
変数/パラメータの置換を示します。
は文字のアトミックシーケンスとして処理する必要があります$((
(で終わる必要があります)、または))
全く同じではありません。$ ((
$( (
$ ( (
OBS:aは$
直前に何もない場合(
に対応し、ブロック内で算術評価の優先順位を指定するために使用できます(
( 。$((...))
$(( (3+4)*5 ))
$(( 3+4*5 ))