我刚刚看到这段代码:
$ DEVELOPMENT=1 node dev-mode.js
该行运行node.js程序并设置环境变量DEVELOPMENT
。我不明白用什么机制来设置env变量?这是有效的语法:
$ [var1=value1 var2=value2] [process_name process_params] ?
答案 0 :(得分:3)
有两种方法可以将当前shell中的传递变量设置为正在运行的程序
使用export
内置语法
$ export MYVALUE=5
$ echo "MYVALUE is $MYVALUE"
MYVALUE is 5
此语法允许变量在您调用的所有后续子shell中的当前shell中生效(用于命令替换或进程替换等),并且即使在子shell终止后变量仍然保持活动状态。
(或)问题中的问题,如果您直接将其发送到命令
$ MYVALUE=5 bash -c 'echo "MYVALUE is $MYVALUE"'
MYVALUE is 5
该值仅传递给子shell(以bash -c
开头的那个),并且一旦退出就不会对父shell产生影响。您现在可以从上面的语法中观察MYVALUE
,它将为空。
$ echo $MYVALUE
$
希望这能回答你的问题。
答案 1 :(得分:1)
此示例应演示:
X=0; Y=1; #set X and Y
#set X, Y for the child and have it expand and print those vars
X=42 Y=43 sh -c 'echo $X $Y'
#print the same vars in the parent
echo $X $Y
var0=val0 var1=val1... command
语法使得它的行为就好像命令前面的变量列表被临时分配了相应的值并且导出了变量 与
一样export var0
命令运行后,变量列表中的变量将恢复其原始值和导出状态(=它们是否自动传播到子进程)。
示例打印
42 43
0 1
答案 2 :(得分:1)
是的,它是一种有效的语法,它在Simple Commands
的{{1}}部分中有描述:
简单命令是一系列可选的变量赋值 然后空白分隔 单词和重定向,并由控制操作符终止。首先 word指定要执行的命令,并作为参数零传递。该 剩下的单词作为参数传递给被调用的命令。