You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash测试语句中使用子shell执行赋值操作失效的原因

Bash子shell中变量赋值失效的原因

正常执行的测试代码

a=255
b=0
[[ a -eq 255 ]] && ( echo $a;echo $b )
# 输出结果:
# 255
# 0

变量赋值失效的测试代码

[[ a -eq 255 ]] && ( a=0;b=255 )
echo $a
# 输出:255
echo $b
# 输出:0

失效原因

用()包裹命令时,Bash会创建一个子shell来执行这些命令。子shell是当前父shell的独立副本,它会继承父shell的变量,但有自己单独的变量环境。

在子shell里对a、b的赋值,只在这个子shell运行期间有效。一旦子shell执行完退出,所有在子shell里做的变量修改都会被直接丢弃,父shell里的原始变量不会有任何变化。

而用{}包裹命令时,这些命令是直接在当前shell进程里执行的,不会创建子shell,所以变量赋值会直接修改当前shell的环境,自然能生效。

内容的提问来源于stack exchange,提问作者J Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:01:02