提问人:interesting 提问时间:5/14/2022 最后编辑:Charles Duffyinteresting 更新时间:5/14/2022 访问量:338
如何在 bash 中解释具有多种引号的字符串?
How are strings with multiple kinds of quotes interpreted in bash?
问:
为了提供上下文,我正在尝试创建一个简单的 bash 版本,为此,我需要模仿 bash 使用多组单引号和双引号解析内容的方式。我无法弄清楚 bash 处理引号内引号的整体过程。我注意到一些重复的模式,但仍然没有全貌。
例如,这个例子:
$ "'"ls"'"
评估结果为:
$ 'ls'
甚至是这个更丑陋的例子:
$ "'"'"""'"ls"'"""'"'"
评估结果为:
$ '"""ls"""'
我注意到出现了以下模式:
- 如果换行引号的计数为偶数,则仅计算反引号内的内容
- 如果换行引号的计数为奇数,则计算为反引号内的内容(包括)。
例如,甚至换行引号:
$ ""'ls'""
评估反引号(单引号)内的内容,而不使用单引号本身,评估:
$ ls
或者对于包装器报价的奇数计数:
$ '''"ls"'''
它计算双引号的内容(包括):
$ "ls" : command not found.
尽管如此,我还是无法全面了解引号内更复杂引号的这种解析模式是如何完成的。
答:
报价按顺序处理,寻找匹配的收盘报价。起始引号和结束引号之间的所有内容都变成一个字符串。嵌套引号没有特殊含义。
"'"ls"'"
当它处理第一个 时,它会扫描以查找下一个字符串的结尾,其中包含 。"
"
'
然后它扫描固定字符串。ls
当它处理 after 时,它会扫描寻找下一个 ,从而产生另一个字符串。"
ls
"
'
这些都是串联的,导致 .'ls'
"'"'"""'"ls"'"""'"'"
"'"
是字符串 。'
'"""'
是字符串"""
"ls"
是字符串ls
'"""'
是字符串"""
"'"
是字符串 。'
将它们连接在一起会产生'"""ls"""'
""'ls'""
""
是一个空字符串。 是字符串 。 是另一个空字符串。将它们连接在一起会产生 .'ls'
ls
""
ls
'''"ls"'''
''
是一个空字符串。 是字符串(包含文本双引号)。 是一个空字符串。将它们连接起来会产生 .由于没有具有该名称的命令(包括文字双引号),因此会出现错误。'"ls"'
"ls"
''
"ls"
单引号和双引号之间存在差异,但它们不会影响您发布的任何示例。请参阅 Bash 中单引号和双引号之间的区别
上一个:如何修复在MySQL中读取的密码
下一个:取消引用列表 R 中的字符串
评论
""'ls'""
""
ls
'ls'