为什么
echo
解释为“
" 仅在交互式 shell 中作为换行符,而不在执行 shell 脚本时也作为换行符?
在交互式
bash
shell 中运行:
$ echo "hello\nworld"
hello
world
使用
bash
作为脚本运行:
$ echo 'echo "hello\\nworld"' > hello_world.sh
$ bash hello_world.sh
hello\nworld
使用
sh
作为脚本运行:
$ sh hello_world.sh
hello
world
TLDR: 交互式 bash 有一个内置的 shell
echo
与 /usr/bin/echo
不同
实用程序
which
可用于显示交互式 bash 命令行中的 echo
实际上使用的是 shell 内置 echo 命令,而不是 /usr/bin/echo
。
由于它们对转义序列的解释表现不同,因此输出也相应不同。
$ which -a echo
echo: shell built-in command
/usr/bin/echo
/bin/echo
/usr/bin/sh
指向 /usr/bin/dash
,它没有内置用于 echo 的 shell,而是使用 /usr/bin/echo
,因此这解释了使用 sh
与 bash
运行脚本时的行为差异。
$ which -a echo
/usr/bin/echo
/bin/echo