答案 0 :(得分:1)
我可以证实这种情况发生了。我不确定是否有适当的方法来解决这个问题,但我已经破解了部分解决方案:
printenv -0 |
while IFS= read -r -d '' s; do
printf "declare -x %s=%q\n" "${s%%=*}" "${s#*=}"
done
这应该产生几乎等于export -p
输出的输出,除了它将正确地转义变量值中的所有特殊字符。一个问题是,printenv
不会打印与export -p
完全相同的变量列表(例如,在我的系统中,export -p
包含$OLDPWD
但不包括$_
) 。我只使用printenv
,因为它支持-0
选项。
示例:如果执行export myvar=$'\E[01;31mtest'
然后运行我的脚本,输出将包含以下内容:
declare -x myvar=$'\E[01;31mtest'
如果你键入export -p
会得到许多用红色打印的行(假设你的终端支持颜色)。
答案 1 :(得分:1)
为什么这是一个问题?如果将输出打印到文件,shell将完全可以接受。如果您想查看其中的内容,请在文件中使用cat -v
或hexdump
之类的内容。