当我使用-x
选项运行shell脚本时,我会获得有关脚本的更多运行时调试信息,但有时此选项会生成乱码输出,如下所示
$ sh -xc 'echo "中文"'
+ echo $'中?\226\207'
中文
但如果我改变一点这个脚本,比如在文本的开头加一个空格,
$ sh -xc 'echo " 中文"'
+ echo ' 中文'
中文
输出绝对正确!你会发现$
符号在后一个脚本中消失了。如果我将空格替换为符号#{}[]()&~^*\;<>|
之一,我也可以获得类似的正确输出。那么sh -x
会发生什么?任何人都可以向我解释一下吗?提前谢谢!