我想在Bash中这样显示一个字符串
I'm a student
你当然可以这样做
echo "I'm a student"
但是如何在字符串两边使用单引号来实现呢?
abithluo1#
echo 'I\'m a student'
不起作用。但以下方法起作用:
echo $'I\'m a student'
来自bash的手册页:单引号之间不能出现单引号,即使前面有反斜杠。
格式为**$'string '**的单词将被特殊处理。该单词将扩展为string,并按照ANSI C标准的规定替换反斜杠转义字符。
jobtbby32#
Glenn Jackman提到的“丑陋”解决方案实际上应该被列为顶级答案,它工作得很好,实际上在某些情况下很漂亮。
'I'"'"'m a student'
这将在I之后结束单引号字符串,然后立即开始一个包含单引号的双引号字符串,然后开始另一个单引号字符串。漂亮!
I
iqih9akk3#
下面的示例之所以有效,是因为转义单引号\'在技术上位于两个单引号参数之间
\'
echo 'I'\''m a student'
mspsb9vt4#
另一种解决方法是使用printf而不是echo,并用\x27转义所需的单引号:
printf
echo
printf 'I\x27m a student!\n'
4条答案
按热度按时间abithluo1#
不起作用。但以下方法起作用:
来自bash的手册页:
单引号之间不能出现单引号,即使前面有反斜杠。
格式为**$'string '**的单词将被特殊处理。该单词将扩展为string,并按照ANSI C标准的规定替换反斜杠转义字符。
jobtbby32#
Glenn Jackman提到的“丑陋”解决方案实际上应该被列为顶级答案,它工作得很好,实际上在某些情况下很漂亮。
这将在
I
之后结束单引号字符串,然后立即开始一个包含单引号的双引号字符串,然后开始另一个单引号字符串。漂亮!
iqih9akk3#
下面的示例之所以有效,是因为转义单引号
\'
在技术上位于两个单引号参数之间mspsb9vt4#
另一种解决方法是使用
printf
而不是echo
,并用\x27转义所需的单引号: