环境变量中的控制字符搞乱了`export`的输出

时间:2016-09-20 20:34:36

标签: bash environment-variables

我在某些环境变量中有一些控制变量,但由于这些字符,简单export命令的输出很混乱。请参见屏幕截图:

messy export command output

我该如何解决这个问题?

2 个答案:

答案 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 -vhexdump之类的内容。