使用变量值作为新变量名的一部分创建变量

daz*_*sed 7 shell variable

我正在尝试使用现有变量的值作为变量名称的一部分来创建一个新变量。

filemsg"$word1"=" "
Run Code Online (Sandbox Code Playgroud)

我也试过

filemsg$word1=" "

filemsg${word1}=" "
Run Code Online (Sandbox Code Playgroud)

在所有尝试中,当该行执行时,我得到以下结果,

cicserrors.sh[45]: filemsgCICS= : not found [No such file or directory]
Run Code Online (Sandbox Code Playgroud)

mic*_*has 9

使用eval

filemsgCICS=foo
word1=CICS
eval "echo \"\$filemsg$word1\"" # => foo
eval "filemsg$word1=bar"
echo "$filemsgCICS" # => bar
Run Code Online (Sandbox Code Playgroud)

但如果你真的需要这种方式,请三思。

另一种方法ksh93是使用namerefs

word1=CICS
nameref v=filemsg$word1
v="xxx" 
echo "$filemsgCICS" # => xxx
Run Code Online (Sandbox Code Playgroud)

对于更讨厌的黑客,请看这里

  • @dazedandconfused:动态命名变量是一种让程序员和代码维护人员在黑暗的小巷里等你的事情,目的是用多余的电源线打败你。这真的不是最佳实践。 (2认同)