変数の割り当ては、変数名、等号、値(オプション)の順になっています。
これは有効な割り当てです。
ABC=123
"$x"1=1
は"$x"1
変数名ではないため、有効な割り当てではありません。それはかもしれevalの変数名にuatedが、そうではありません。実際、シェルはそれがコマンドであると信じています。
達成したいことを行う1つの方法は次のとおりです。
eval "$x"1=1
bashの他の方法(他のシェルではない)は次のとおりです。
declare "$x"1=1
または(再びbashのみ):
let "$x"1=1
(あなたのケースでは大きな違いはありません。)
しかし、Jakujeがコメントで述べたように、シェルに配列(ksh、bash、またはzsh)がある場合は、配列を使用することをお勧めします。
完全を期すために:
eval
任意のコマンドを実行します。したがって、等号の右側にあるコマンドに展開される変数がある場合、そのコマンドが実行されます。次のコード:
x=a
y='$(echo hello)'
eval "$x=$y"
と同等a=hello
です。
declare
変数を割り当てるための組み込みbashであり、コマンドを実行しません。次のコード:
x=a
y='$(echo hello)'
declare "$x=$y"
と同等a='$(echo hello)'
です。
let
declare
コマンドを実行しないという点で、に似ています。しかしdeclare
、とlet
は逆に、算術演算に使用できます。
let a="1 + 2"
と同等a=3
です。