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

为什么第一个命令不像示例中的命令那样工作?
救命啊!
我知道我引入了一个额外的空间。如果把多余的空格改成其他的(冒号、破折号等),那么一切都很好。
http://www.tldp.org/LDP/abs/html/special-chars.html中没有关于以下命令的详细信息:echo{“A”、“B”、“C”}{“D”、“E”、“F”}{“G”、“H”、“I”。我想知道更多。

最佳答案

为什么第一个命令不像示例中的命令那样工作?
因为你引入了一个额外的空间:

#                     |==> 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

额外的空间会导致shell首先展开{file1,file2},然后展开{\ A," B",' C'}
引用自Brace Expansion
以可选的前导形式扩展的模式,
后跟一系列逗号分隔的字符串或序列
一对大括号之间的表达式,后跟可选的
附言。前导码以包含在
大括号和postscript随后被附加到每个结果
字符串,从左到右展开。
在大括号扩展后引入空格时(后面跟两个空格是空格!),以下令牌不再被视为postscript,而是单独展开的。

关于bash - Bash中的“括号扩展”如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20943574/

10-16 20:26