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

行内赋值变量后跟随Shell内置命令,后续命令能否访问该变量?

POSIX Shell中var=value shell_builtins形式的行为疑问

我想了解POSIX Shell在var=value shell_builtins;这种命令形式下的行为。POSIX手册指出:

若命令名是特殊内置工具,变量赋值应影响当前执行环境

这似乎表明变量var在同一会话的后续命令中可访问,但实际测试:

$ var=value pwd
/home/red
$ echo ${var}
# 无输出

即使使用bash --posix进入POSIX模式,结果依然如此。我忽略了什么?


解答

核心问题在于你用错了内置工具类型——pwd是普通内置工具,不是POSIX定义的「特殊内置工具」。

POSIX规定的特殊内置工具包括::, ., break, continue, eval, exec, exit, export, readonly, return, set, shift, times, trap, unset。只有当赋值前缀搭配这类特殊内置工具时,变量才会保留在当前shell的执行环境中。

举个正确的测试例子,用特殊内置工具export:

$ var=value export
$ echo ${var}
value

或者用空命令:(属于特殊内置工具):

$ var=value :
$ echo ${var}
value

而pwd这类普通内置工具,和外部命令的行为一致:前缀赋值仅在该命令执行期间生效,执行完成后变量就会被清除,不会留存到当前shell会话里。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:42:41