为什么bash解释为“ " 仅在交互式 shell 中作为换行符,而不是在执行 shell 脚本时作为换行符?

问题描述 投票:0回答:2

为什么 bash 解释为“ " 仅在交互式 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
linux bash shell sh newline
2个回答
0
投票

默认情况下,外部

echo
命令 不会解释转义字符并逐字打印其参数。

-e
参数告诉它将以
\
开头的序列解释为特殊字符。

为了速度优化,shell 提供了

echo
的内部实现,这些实现可能支持不同的参数,并且可能有不同的默认值。

也有可能

sh
的初始化脚本(也可能由
bash
执行)定义了一个名为
echo
的函数或别名,将工作委托给带有额外参数的外部或内置
echo
-e


0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.