Bash - 如何在变量名称中使用变量

Bash - 如何在变量名称中使用变量

是的,是的,我知道你可能会想“嘿,还有数百人问同样的问题”,但事实并非如此;我不想做这样的事情:

foo="example1"
bar="example2"
foobar="$foo$bar"

我正在尝试这样做:

foo="example1"
$foo="examle2"

但每当我尝试这样做时,我都会收到一条错误消息:

bash: example1=example2: command not found

有什么建议么?这可能吗?

答案1

这里有些例子:

declare [-g] "${foo}=example2"
declare -n foo='example1'
foo='example2'
eval "${foo}=example2"
mapfile -t "${foo}" <<< 'example2'
printf -v "${foo}" '%s' 'example2'
IFS='' read -r "${foo}" <<< 'example2'
typeset [-g] "${foo}=example2"

正如其他用户所说,eval一般来说,要小心间接分配。

答案2

可以使用eval.

eval $foo="examle2"

请注意,您应该非常确定 的值是$foo可以信任的。

更好的替代方案是使用索引数组,这样您就不会冒险执行任意命令。

答案3

suffix=bzz
declare -g prefix_$suffix=mystr

...进而...

varname=prefix_$suffix
echo ${!varname}

无耻地被盗这里

编辑:正如斯蒂芬所说,这通常是一个坏主意,应该避免。索引数组是更好的选择。

相关内容