新しい変数名の一部として変数値を使用して変数を作成します。

新しい変数名の一部として変数値を使用して変数を作成します。

既存の変数の値を変数名の一部として使用して新しい変数を作成しようとしています。

filemsg"$word1"=" "

私も試しました

filemsg$word1=" "

filemsg${word1}=" "

すべての試行でこの行が実行されると、次の結果が得られます。

cicserrors.sh[45]: filemsgCICS= : not found [No such file or directory]

答え1

使用eval:

filemsgCICS=foo
word1=CICS
eval "echo \"\$filemsg$word1\"" # => foo
eval "filemsg$word1=bar"
echo "$filemsgCICS" # => bar

しかし、本当にこの方法が必要な場合は、もう一度考えてみてください。

もう一つのksh93方法名前参照:

word1=CICS
nameref v=filemsg$word1
v="xxx" 
echo "$filemsgCICS" # => xxx

このような不快なハッキングを見るには、次のことを確認してください。ここ

答え2

exportevalシェルトークンの後にシェルコードが実行される危険性がないため、これを行うよりもはるかに安全です。ただし、変数を処理するので、export必要に応じて使用できます。

export "filemsg$word1= "

答え3

そうではないPOSIXしかし、いつもbashありますprintf -v。 stdoutで印刷せず、次の変数名で印刷します-v

x=foo; printf -v $x bar; echo $foo

出力:

bar

答え4

この試み:

filemsgCICS=foo

word1=CICS

ref_filemsg=filemsg$word1

echo ${!ref_filemsg} => foo

関連情報