Bash 通过使用exec执行命令来设置变量
可以为单个命令设置一个变量,如下所示:Bash 通过使用exec执行命令来设置变量,bash,syntax,exec,Bash,Syntax,Exec,可以为单个命令设置一个变量,如下所示: MY_VARIABLE=my_value ./my_script.sh exec ./my_script.sh exec MY_VARIABLE=my_value ./my_script.sh 您可以切换到另一个脚本,如下所示: MY_VARIABLE=my_value ./my_script.sh exec ./my_script.sh exec MY_VARIABLE=my_value ./my_script.sh 但当我尝试这样做时: M
MY_VARIABLE=my_value ./my_script.sh
exec ./my_script.sh
exec MY_VARIABLE=my_value ./my_script.sh
您可以切换到另一个脚本,如下所示:
MY_VARIABLE=my_value ./my_script.sh
exec ./my_script.sh
exec MY_VARIABLE=my_value ./my_script.sh
但当我尝试这样做时:
MY_VARIABLE=my_value ./my_script.sh
exec ./my_script.sh
exec MY_VARIABLE=my_value ./my_script.sh
我得到一个错误:
exec: MY_VARIABLE=my_value: not found
为什么会这样?有什么方法可以做到这一点吗?您需要使用
env
来指定环境变量:
exec env MY_VARIABLE=my_value ./my_script.sh
如果希望脚本从空环境或仅使用指定变量开始,请使用-i
选项
从man env
:
env - run a program in a modified environment
在bash中,可以通过将赋值放在命令的开头来设置命令的环境变量。这对
exec
的作用与任何其他命令相同,因此您可以编写:
MYVARIABLE=my_value exec ./my_script.sh
“exec env”的好处在于,您可以在可能设置或不设置shell变量的变量上使用它。例如,如果我有一个脚本,它对任意命令进行了一些设置,我可以用
exec env“$@”
结束它,无论“$@”是否设置变量,它都会工作。要使用此解决方案,我必须解析并拆分“$@”中的参数。如何添加多个环境变量?我知道它很旧,但只是为了回答@maxgalbu问题:exec env VAR1=value env VAR2=value2./my_script.sh