将值设置为变量时出错“命令未找到”

时间:2017-01-06 13:47:24

标签: bash shell

我有以下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?

2 个答案:

答案 0 :(得分:2)

不幸的是,这不是间接做的方式。要做你想做的事,你可以printf这样使用

printf -v "$bar" "1"

会将打印的值(此处为1存储在作为-v参数的变量名称中,$barfoo扩展时将declare

此外,您可以使用declare "$bar"=1 之类的

declare

将在执行name=value命令之前执行变量替换。

在你的尝试中,bash处理的顺序正在咬你。在进行变量扩展之前,该线被分成命令。命令可以包含变量赋值,但是,此时您没有foo=1形式的变量赋值,因此命令的一部分不会被视为赋值。之后,变量扩展完成,它变为foo=1,但到那时我们已经完成了决定它是否是一个赋值,所以只是因为它现在看起来像一个并不意味着它被视为这样。

由于它未作为变量赋值处理,因此不能将其视为命令。您的路径中没有名为===的命令,因此您会收到命令错误。

答案 1 :(得分:1)

您需要使用eval功能,例如

${bar}=1

foo=1将首先完成替换过程,因此它变为kill-rectangle,然后eval将在您的shell上下文中评估