我想在 Bash 中显示一个字符串,如下所示:
I'm a student
当然你可以这样做:
echo "I'm a student"
但是如何在字符串周围使用单引号来完成此操作?
echo 'I\'m a student'
不起作用。但以下有效:
echo $'I\'m a student'
来自 bash 的手册页:
单引号之间不能出现单引号,即使位于单引号前面 通过反斜杠。
....
$'string' 形式的单词会被特殊处理。这个单词 扩展为字符串,反斜杠转义字符替换为 由 ANSI C 标准指定。
格伦·杰克曼提到的“丑陋”解决方案实际上应该列为顶级答案。它运作良好,在某些情况下实际上很漂亮。
'I'"'"'m a student'
这将结束
I
之后的单引号字符串,然后立即开始一个包含单引号的双引号字符串,然后开始另一个单引号字符串。然后,Bash 将所有连续的字符串连接成一个。
美丽!
下面的示例之所以有效,是因为转义单引号
\'
从技术上讲位于两个单引号参数之间
echo 'I'\''m a student'
另一种解决方法是使用
printf
代替 echo
并使用 \x27: 转义所需的单引号
printf 'I\x27m a student!\n'
我提议
echo "I'm a student"
就像其他语言一样。