Dan*_*der 6 shell bash dash environment-variables
我想将我在破折号脚本中设置的一些环境变量导出到一个文件中:
myvariable="line 1
LINE=3
some characters: # \" \$
line 5"
myvariable2="abc"
export myvariable myvariable2
Run Code Online (Sandbox Code Playgroud)
预期结果(可用脚本):
declare -x myvariable="line 1
LINE=3
some characters: # \" \$
line 5"
declare -x myvariable2="abc"
Run Code Online (Sandbox Code Playgroud)
结果就是我使用export
命令得到的结果。但它导出所有 envvars 并且不允许过滤。由于变量的多行字符,grep
结果是不可能的。
相比之下,该printenv
命令只允许输出选择的变量,但它不关心转义,并且在此用例中不输出变量名称。
在zsh
或yash
.
export -p myvariable myvariable2
Run Code Online (Sandbox Code Playgroud)
会如你所期望的那样工作。
否则,在 中bash
,您仍然可以执行以下操作:
for var in myvariable myvariable2; do
printf 'export %s=%q\n' "$var" "${!var}"
done
Run Code Online (Sandbox Code Playgroud)
POSIXly,您可以使用以下命令手动进行引用awk
:
awk -v q="'" '
function escape(v) {
gsub(q, q "\\" q q, v)
return q v q
}
BEGIN {
for (i = 1; i < ARGC; i++)
print "export " ARGV[i] "=" escape(ENVIRON[ARGV[i]])
}' myvariable myvariable2
Run Code Online (Sandbox Code Playgroud)
为了好玩,一个在某些 shell 中工作的 hacky 解决方案(bash
、zsh
、mksh
、ksh93
、 notyash
或dash
):
(PS4=; set -x; export "myvariable=$myvariable") 2>&1
Run Code Online (Sandbox Code Playgroud)