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

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

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

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

export这样做比 这样做安全得多,eval因为它不存在在 shell 令牌之后执行 shell 代码的危险。但它会处理export变量,因此您可以随心所欲地接受它。

export "filemsg$word1= "

答案3

它不是POSIX,但总是bashprintf -v,它不打印到标准输出,而是打印到后面的任何变量名称-v

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

输出:

bar

答案4

尝试这个:

filemsgCICS=foo

word1=CICS

ref_filemsg=filemsg$word1

echo ${!ref_filemsg} => foo

相关内容