为何bash中echo默认等效于echo -e?如何关闭该特性?
解决bash中echo默认解析转义序列的问题
你遇到的这个问题是因为bash的xpg_echo shell选项被默认开启了。在Solaris环境下的bash 5.1.12中,这个选项开启后,内置echo会默认遵循XPG规范,自动解析转义序列(比如把\t转换成制表符),相当于默认带上了-e参数的效果。
临时关闭自动转义特性
执行以下命令可以临时关闭这个选项,当前shell会话内生效:
shopt -u xpg_echo
测试验证:
bash-5.1$ shopt -u xpg_echo bash-5.1$ builtin echo 'a\tb' a\tb bash-5.1$ builtin echo -e 'a\tb' a b
永久关闭自动转义特性
如果想要每次启动bash都生效,把shopt -u xpg_echo添加到你的~/.bashrc或者~/.bash_profile配置文件末尾即可。
另外补充一点:你日常用printf是更稳妥的选择,因为echo的行为在不同shell、不同系统以及不同选项配置下差异很大,而printf的输出行为在各个环境中更统一,适合脚本场景。
内容的提问来源于stack exchange,提问作者Fravadona
相关产品推荐
相关产品推荐

