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/