我想将在破折号脚本中设置的一些环境变量导出到文件中:
myvariable="line 1
LINE=3
some characters: # \" \$
line 5"
myvariable2="abc"
export myvariable myvariable2
预期结果(可用的脚本):
declare -x myvariable="line 1
LINE=3
some characters: # \" \$
line 5"
declare -x myvariable2="abc"
结果就是我使用该export
命令得到的结果。但它会导出所有环境变量并且不允许过滤。由于变量的多行字符,grep
无法计算结果。
相比之下,该printenv
命令允许仅输出变量的选择,但它不关心转义,并且在此用例中它不会输出变量名称。
答案1
在zsh
或yash
.
export -p myvariable myvariable2
会如你所期望的那样工作。
否则,在 中bash
,您仍然可以执行以下操作:
for var in myvariable myvariable2; do
printf 'export %s=%q\n' "$var" "${!var}"
done
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
为了好玩,一个在某些 shell 中工作的 hacky 解决方案(bash
、zsh
、mksh
、ksh93
、 notyash
或dash
):
(PS4=; set -x; export "myvariable=$myvariable") 2>&1