来自 Bash 参考手册
分词部分的规则:
shell 扫描没有出现在双引号内的参数扩展、命令替换和算术扩展的结果以进行分词。
文件名扩展部分的规则:
分词后,除非设置了 -f 选项(参见第 4.3.1 节 [The Set Builtin],第 58 页),Bash 会扫描每个单词以查找字符 '*'、'?' 和 '['。如果出现这些字符中的一个,则将该单词视为一个模式,并替换为按字母顺序排序的与该模式匹配的文件名列表
因此,在参数扩展、命令替换和算术扩展之后,除非在双引号内的部分上,否则会发生分词。
[[和]]之间的词不进行分词和文件名扩展;执行波浪号扩展、参数和变量扩展、算术扩展、命令替换、进程替换和引号删除。
(强调我的)
该case
声明也有豁免
在尝试匹配之前,单词会经历波浪号扩展、参数扩展、命令替换、算术扩展和引号删除。每个模式都经历波浪号扩展、参数扩展、命令替换和算术扩展。
值得注意的是它们的缺席是分词和文件名扩展。
此外,变量赋值(参见Shell 参数)
一个变量可以通过以下形式的语句赋值
name=[value]
如果未给出值,则为变量分配空字符串。所有值都经过波浪号扩展、参数和变量扩展、命令替换、算术扩展和引号删除
所以这是安全的:
a="hello world"
b=$a
Run Code Online (Sandbox Code Playgroud)
其他不进行分词的地方:
我的技巧:在 bash 手册中搜索“undergo”这个词。
归档时间: |
|
查看次数: |
370 次 |
最近记录: |