我有以下test.sh脚本:
#!/bin/bash
foo=0
bar=foo;
${bar}=1
echo $foo;
输出:
./test.sh: line 4: foo=1: command not found
0
为什么“找不到命令”错误?如何将脚本更改为“echo $ foo”输出1?
答案 0 :(得分:2)
不幸的是,这不是间接做的方式。要做你想做的事,你可以printf
这样使用
printf -v "$bar" "1"
会将打印的值(此处为1
存储在作为-v
参数的变量名称中,$bar
在foo
扩展时将declare
此外,您可以使用declare "$bar"=1
之类的
declare
将在执行name=value
命令之前执行变量替换。
在你的尝试中,bash处理的顺序正在咬你。在进行变量扩展之前,该线被分成命令。命令可以包含变量赋值,但是,此时您没有foo=1
形式的变量赋值,因此命令的一部分不会被视为赋值。之后,变量扩展完成,它变为foo=1
,但到那时我们已经完成了决定它是否是一个赋值,所以只是因为它现在看起来像一个并不意味着它被视为这样。
由于它未作为变量赋值处理,因此不能将其视为命令。您的路径中没有名为===
的命令,因此您会收到命令错误。
答案 1 :(得分:1)
您需要使用eval功能,例如
${bar}=1
foo=1
将首先完成替换过程,因此它变为kill-rectangle
,然后eval将在您的shell上下文中评估