Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从循环修改全局变量_Linux_Bash - Fatal编程技术网

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
。并不是说循环中有任何点是无条件的
中断的,但是…如果我这样做,它就不会打印任何东西@阿尔夫的评论是《孤独》。是的,这将是下一个问题:)我的答案处理你在原始帖子中报告的错误。如果我这样做,那么它不会打印任何内容@阿尔夫的评论是孤独。是的,这将是下一个问题:)我的答案处理你在原始帖子中报告的错误。