如何在 Bash 中转义单引号字符串中的单引号?

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

我想在 Bash 中显示一个字符串,如下所示:

I'm a student

当然你可以这样做:

echo "I'm a student"

但是如何在字符串周围使用单引号来完成此操作?

linux bash escaping
5个回答
161
投票
echo 'I\'m a student'

不起作用。但以下有效:

echo $'I\'m a student'

来自 bash 的手册页:

单引号之间不能出现单引号,即使位于单引号前面 通过反斜杠。
....
$'string' 形式的单词会被特殊处理。这个单词 扩展为字符串,反斜杠转义字符替换为 由 ANSI C 标准指定。


77
投票

格伦·杰克曼提到的“丑陋”解决方案实际上应该列为顶级答案。它运作良好,在某些情况下实际上很漂亮。

'I'"'"'m a student'

这将结束

I
之后的单引号字符串,然后立即开始一个包含单引号的双引号字符串,然后开始另一个单引号字符串。然后,Bash 将所有连续的字符串连接成一个。

美丽!


35
投票

下面的示例之所以有效,是因为转义单引号

\'
从技术上讲位于两个单引号参数之间

echo 'I'\''m a student'

0
投票

另一种解决方法是使用

printf
代替
echo
并使用 \x27:

转义所需的单引号
printf 'I\x27m a student!\n'

-4
投票

我提议

echo "I'm a student"

就像其他语言一样。

© www.soinside.com 2019 - 2024. All rights reserved.