2

http://www.tldp.org/LDP/abs/html/special-chars.html中有一个例子

$ echo {file1,file2}\ :{\ A," B",' C'}  
file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

这是如何运作的?
我改变这个命令如下:

$ echo {file1,file2}\  {\ A," B",' C'}  
file1  file2   A  B  C
$ echo {file1,file2}\ -{\ A," B",' C'}  
file1 - A file1 - B file1 - C file2 - A file2 - B file2 - C

为什么第一个命令不像示例中的命令那样工作?
帮助!

我知道我已经引入了一个额外的空间。如果将额外的空间更改为其他内容(冒号、破折号等),那么一切都很好。
没有关于以下命令的详细信息: echo {"A","B",'C'}\ {"D","E",'F'}\ {"G","H",'I'} in http://www.tldp.org/LDP/abs/html/special-chars.html。我想知道更多。

4

1 回答 1

4

为什么第一个命令不像示例中的命令那样工作?

因为你引入了一个额外的空间:

#                     |==> This is it!
#                     |
$ echo {file1,file2}\  {\ A," B",' C'}
file1  file2   A  B  C
$ echo {file1,file2}\ {\ A," B",' C'}    # This is probably what you expected!
file1  A file1  B file1  C file2  A file2  B file2  C

额外的空间导致外壳首先扩展{file1,file2},然后扩展{\ A," B",' C'}


引用Brace Expansion

要进行大括号扩展的模式采用可选前导码的形式,后跟一系列逗号分隔的字符串或一对大括号之间的序列表达式,后跟可选的后记。序言作为前缀添加到大括号中包含的每个字符串,然后将后记附加到每个结果字符串,从左到右扩展。

当您在大括号展开后引入一个空格(aBackspace后跟两个空格是一个空格!),以下标记不再被视为后记,而是单独展开。

于 2014-01-06T05:38:04.037 回答