行内赋值变量后跟随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
相关产品推荐
相关产品推荐

