jesse_b Asked: 2022-06-03 09:55:32 +0800 CST2022-06-03 09:55:32 +0800 CST 2022-06-03 09:55:32 +0800 CST 什么是大引号,我可以在我的代码中使用它们吗? 772 不知何故,花引号进入了我的代码,我得到了意想不到的行为 #!/bin/sh if [ foo = ‘foo’ ]; then echo yes else echo no fi 我希望这会回应“是”,但它会回应“否”。 shell-script quoting 1 个回答 Voted Best Answer jesse_b 2022-06-03T09:55:32+08:002022-06-03T09:55:32+08:00 排版中使用了弯引号或“智能引号”,并且“直引号”通常会被各种文字处理程序自动更改为弯引号。它们有时被称为“智能引号”,因为它们有点智能地确定引用文本的方向并朝它卷曲。 以下是各种报价的表格: 特点 描述 视窗/Unix 苹果系统 HTML ' 直单引号 ' ' ' " 直双引号 " " " ' 开单引号 alt+0145 option+] ‘ ' 结束单引号 alt+0146 option+ shift+] ’ “ 开双引号 alt+0147 option+[ “ ” 结束双引号 alt+0148 option+ shift+[ ” 然而,在编程语言中,这些引号是不可互换的。直引号通常是在语言中执行特定功能的特殊字符,而外观相似的弯引号不被识别为特殊字符。相反,它们可能会产生错误,或者它们可能会被视为类似于字母的普通字符。 所以在这个问题的代码示例中,大引号被视为它们的文字字符,而不仅仅是外壳转义字符,因此'foo'不匹配'‘foo’' 为防止出现此问题,您应该只在专为代码编辑而设计的程序中编辑代码,并注意从任何文字处理应用程序(LibreOffice Word、写字板、电子邮件等)、PDF 文档或在线代码源复制代码。 弯引号和直引号之间的视觉区别可能很小,但通常可以分辨出区别。卷曲引号通常显示倾斜,或类似于微型 6 或 9,具体取决于字体。 类似的程序od也可以用来区分常规的 ASCII 直引号和 Unicode 大引号。例如,以下文本文件的“foo”一行带有花引号,另一行"foo"带有直引号,并且在 UTF-8 语言环境中,od -cmacOS 和 GNU/Linux 上的输出显示花引号占用多个字节,而直引号占用多个字节只取一个: mac$ od -c test.txt 0000000 “ ** ** f o o ” ** ** \n " f o o " \n 0000020 gnu$ od -c test.txt 0000000 342 200 234 f o o 342 200 235 \n " f o o " \n 0000020 (在上图中,macOSod在第一个位置显示完整字符,并用 标记字符的其余字节**,而在下图中,GNUod以八进制显示字符中所有字节的值。)
排版中使用了弯引号或“智能引号”,并且“直引号”通常会被各种文字处理程序自动更改为弯引号。它们有时被称为“智能引号”,因为它们有点智能地确定引用文本的方向并朝它卷曲。
以下是各种报价的表格:
'
"
‘
’
“
”
然而,在编程语言中,这些引号是不可互换的。直引号通常是在语言中执行特定功能的特殊字符,而外观相似的弯引号不被识别为特殊字符。相反,它们可能会产生错误,或者它们可能会被视为类似于字母的普通字符。
所以在这个问题的代码示例中,大引号被视为它们的文字字符,而不仅仅是外壳转义字符,因此
'foo'
不匹配'‘foo’'
为防止出现此问题,您应该只在专为代码编辑而设计的程序中编辑代码,并注意从任何文字处理应用程序(LibreOffice Word、写字板、电子邮件等)、PDF 文档或在线代码源复制代码。
弯引号和直引号之间的视觉区别可能很小,但通常可以分辨出区别。卷曲引号通常显示倾斜,或类似于微型 6 或 9,具体取决于字体。
类似的程序
od
也可以用来区分常规的 ASCII 直引号和 Unicode 大引号。例如,以下文本文件的“foo”
一行带有花引号,另一行"foo"
带有直引号,并且在 UTF-8 语言环境中,od -c
macOS 和 GNU/Linux 上的输出显示花引号占用多个字节,而直引号占用多个字节只取一个:(在上图中,macOS
od
在第一个位置显示完整字符,并用 标记字符的其余字节**
,而在下图中,GNUod
以八进制显示字符中所有字节的值。)