是的,是的,我知道你可能会想“嘿,还有数百人问同样的问题”,但事实并非如此;我不想做这样的事情:
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}
无耻地被盗这里。
编辑:正如斯蒂芬所说,这通常是一个坏主意,应该避免。索引数组是更好的选择。