Linux 从循环修改全局变量
为什么我会受伤Linux 从循环修改全局变量,linux,bash,Linux,Bash,为什么我会受伤 /tmp/test: line 4: 0=Done: command not found 从下面 a="0" while [ true ]; do $a="Done" exit done echo $a 我希望它会输出Done定义变量时不需要使用$,只有在访问变量时才需要使用 您需要将定义变量a的行更改为: a="Done" 至于解释,我认为这里发生的是$a被解析为0,然后shell将整个0=Done视为单个(未找到)命令。访问未定义的变量仍然会返回退出代码。
/tmp/test: line 4: 0=Done: command not found
从下面
a="0"
while [ true ]; do
$a="Done"
exit
done
echo $a
我希望它会输出
Done
定义变量时不需要使用$
,只有在访问变量时才需要使用
您需要将定义变量a
的行更改为:
a="Done"
至于解释,我认为这里发生的是
$a
被解析为0
,然后shell将整个0=Done
视为单个(未找到)命令。访问未定义的变量仍然会返回退出代码。定义变量时不需要使用$
,仅在访问变量时使用
您需要将定义变量a
的行更改为:
a="Done"
至于解释,我认为这里发生的是
$a
被解析为0
,然后shell将整个0=Done
视为单个(未找到)命令。访问未定义的变量仍然返回0
退出代码。您应该使用break
退出循环exit
将退出整个shell。如果您有一个无条件的中断
或退出
,那么为什么您需要而[true]
循环呢?@Alfe解决了这个问题。你可以把它作为一个答案吗?当你可以执行true
命令(即为true;do…;done
)时,为什么要测试字符串“true
。不是说循环中有任何点是无条件的break
,而是…您应该使用break
退出循环exit
将退出整个shell。如果您有一个无条件的中断
或退出
,那么为什么您需要而[true]
循环呢?@Alfe解决了这个问题。你可以把它作为一个答案吗?当你可以执行true
命令(即为true;do…;done
)时,为什么要测试字符串“true
。并不是说循环中有任何点是无条件的中断的,但是…如果我这样做,它就不会打印任何东西@阿尔夫的评论是《孤独》。是的,这将是下一个问题:)我的答案处理你在原始帖子中报告的错误。如果我这样做,那么它不会打印任何内容@阿尔夫的评论是孤独。是的,这将是下一个问题:)我的答案处理你在原始帖子中报告的错误。