为何HELLO=WORLD echo $HELLO命令无法输出变量值?
为什么
HELLO=WORLD echo $HELLO输出为空? 这是因为Shell的命令处理顺序导致的:
- Shell在执行整条命令前,会先完成所有变量展开操作。当你输入
HELLO=WORLD echo $HELLO时,当前Shell会先解析$HELLO,但此时这个变量在当前Shell环境中还未被定义,所以直接展开为空字符串。 - 变量展开完成后,Shell才会执行
HELLO=WORLD echo——也就是给echo进程设置HELLO=WORLD的环境变量,但此时echo的参数已经是空的了,自然输出为空。
如果想要达到预期效果,有两种常用写法:
- 使用子Shell,让变量展开在新Shell中进行:
单引号会阻止当前Shell解析HELLO=WORLD sh -c 'echo $HELLO'$HELLO,让子Shell在设置环境变量后再展开变量。 - 在当前Shell中先设置变量,再执行命令:
分号将两个命令分隔开,变量先在当前Shell中生效,后续的HELLO=WORLD; echo $HELLOecho就能读取到值。
内容的提问来源于stack exchange,提问作者Fredster
相关产品推荐
相关产品推荐

