全局/拆分
我先处理glob / split。您链接到@Stephane的答案是在一般意义上使用这些术语。它们不是实际的命令或类似的东西,只是伪操作。
在split("$test")
将“$测试”向上的内容分割成一个元件的“阵列”。
然后,glob(...)
它将注意扩展其中包含诸如*
或范围之类的shell球形字符的任何这些元素[1-2]
。
例
说我们的字符串$test
如下。
$ test="afile[1-2] afile[3-5]"
还可以说我们有一个包含一些文件的目录。
$ ls -1
afile1
afile2
afile3
afile4
afile5
现在,如果我们尝试在不带引号的情况下回显它,您应该注意到我们的字符串在空格处分开,然后所有的通配符都会扩展。
$ echo $test
afile1 afile2 afile3 afile4 afile5
但是,如果我们在将变量作为参数传递时引用该变量,则会echo
得到原始的文字字符串。
$ echo "$test"
afile[1-2] afile[3-5]
可变膨胀
术语变量扩展旨在涵盖Shell作为其基本操作的一部分执行的基本操作。Shell负责解析输入,然后在语法上认为正确之后执行该输入。
在我们之前的示例中。当变量$test
被提供给echo
未加引号的时候,我们告诉外壳程序继续进行操作,将这些参数拆分开,然后将它们放宽。
用引号括起来时,我们实际上是在用双引号包裹的变量禁用了该功能。
例
这是一些其他的globbing和split示例。
球/分裂自动发生
$ echo file{1..3}
file1 file2 file3
$ echo file{1..3} dir{a..b}
file1 file2 file3 dira dirb
$ echo dir{z..w} file{A..D}
dirz diry dirx dirw fileA fileB fileC fileD
$ echo dir{z..w} file{A..B} fileC
dirz diry dirx dirw fileA fileB fileC
通过双引号禁用glob /拆分
$ echo "dir{z..w} file{A..B} fileC"
dir{z..w} file{A..B} fileC
$ echo "dir{z..w} file{A..B}"
dir{z..w} file{A..B}