シェル算術で変数名を保護するには?

シェル算術で変数名を保護するには?

変数は中括弧で保護できます。

Mynewvar=1
echo $Mynewvar
1
echo ${Mynewvar}
1

ただし、シェル内で算術演算を実行すると保護できなくなります。

Mynewvar=1
echo $((Mynewvar+9))
10
echo $(({Mynewvar}+9))
bash: {Mynewvar}+9: syntax error: operand expected (error token is "{Mynewvar}+9")

シェル操作中に変数名を囲む正しい方法は何ですか?

答え1

変数を「保護」するために変数の周りに中かっこを使用したいのは、変数名として解釈されず、他の文字の横で使用できるためです。たとえば、

$ n=1
$ echo $nx

# there is no variable named nx so this prints nothing however
$ echo "${n}x"
1x

有効な算術演算子は変数名として解釈されないため、そのような操作を実行する場合は中括弧は必要ありません$((n+1))

ただし、2 つ以上の変数を実際に連結するには、$算術拡張で拡張を使用できます。たとえば、次のようになります。

$ n=1
$ x=1
$ echo $(($n$x+1))
12

関連情報