変数を逆参照するときは、記号を使用する必要がbash
あります$
。それにもかかわらず、次はうまくいくようです。
x=5
[[ x -gt 2 ]]
誰でもこれを説明できますか?
編集:(追加情報)
私の言葉は、[[]]コマンドが$記号なしで私の変数xを逆参照する方法と理由を意味します。はい、x = 1の場合、ステートメントはfalseと評価されます(状態1を返します)。
ベストアンサー1
その理由は、-eq
パラメータの算術的評価を強制するためです。
算術演算子:-eq
、、、-gt
および内部的に(ksh、zsh、およびbashで)変数名はCのように自動的に拡張され、先行が必要ないことを-lt
意味します。-ge
-le
-ne
[[ ]]
$
これを確認するには、bashソースコードを見てください。マニュアルには付属していません直接確認してください。
算術演算子の処理は
test.c
内部的にこの関数に属します。arithcomp (s, t, op, flags)
ここで、と
s
はt
すべてオペランドです。オペランドは関数に渡されます。l = evalexp (s, &expok); r = evalexp (t, &expok);
この関数は、次のヘッダーを使用して
evalexp
内部で定義されます。expr.c
/* expr.c -- arithmetic expression evaluation. */
はい。算術演算子の両方が(直接的に)算術式の評価に属します。直接的で、しかし、ifはありません。
実際、:
$ x=3
どちらも失敗します。
$ [[ x = 4 ]] && echo yes || echo no
no
$ [[ x = 3 ]] && echo yes || echo no
no
これは正確でx
拡張されておらず、x
数字と同じではありません。
しかし:
$ [[ x -eq 3 ]] && echo yes || echo no
yes
$ [[ x -eq 4 ]] && echo yes || echo no
no
名前付き変数はx
拡張されます($なしでも)。
これはzshやbashでは発生しません[…]
(kshでは発生します)。
これは内部で発生するのと同じことです$((…))
。
$ echo $(( x + 7 ))
10
そしてこれは(非常に)再帰的であることを理解してください(ダッシュとヤッシュを除く)。
$ a=b b=c c=d d=e e=f f=3
$ echo "$(( a + 7 ))"
10