mik*_*ter 5 bash shell environment-variables quoting command-line-arguments
我正在使用环境文件来配置网络应用程序。最近我需要导出这样的值:
RUBYOPT='-W:no-derecated -W:no-experimental'
Run Code Online (Sandbox Code Playgroud)
test.env它包含在具有其他配置变量的文件中。
我使用此命令导出文件中的所有环境变量:
export $(cat test.env | xargs)
Run Code Online (Sandbox Code Playgroud)
使用上面的值,该命令会给出以下错误:
-bash: export: `-W:no-experimental'': not a valid identifier
Run Code Online (Sandbox Code Playgroud)
我可以通过复制粘贴输出来导出值,cat test.env | xargs但在像上面这样的单个命令中它不起作用。
一些测试表明,当值包含空格及其后的冒号时,就会出现问题:。
我需要什么样的引用魔法才能使我的环境文件再次工作?
Ted*_*gmo 11
的构造export $(cat test.env | xargs)非常脆弱,你会得到'字符(和其他特殊字符) 的 shell 解释,RUBYOPT='-W:no-derecated -W:no-experimental'因此变成RUBYOPT=-W:no-derecated -W:no-experimental. 注意缺少的'. 除非您设置带有空格的变量,否则这不是问题。
我建议放弃这种导出环境文件中所有变量的方式。
如果您的文件包含未编辑的语法test.env变量赋值,您可以改为打开自动导出,然后获取该文件。bashexporttest.env
例子:
set -a # turn on automatic exporting
. test.env # source test.env
set +a # turn off automatic exporting
Run Code Online (Sandbox Code Playgroud)
从BASH_BUILTINS(man set):
set -a“创建或修改的每个变量或函数都被赋予导出属性,并标记为导出到后续命令的环境。 ”