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”} http://www.tldp.org/LDP/abs/html/special-chars.html。我想了解更多。
答案 0 :(得分: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
额外空格会导致shell首先展开{file1,file2}
,然后展开{\ A," B",' C'}
。
要扩展的模式采用可选前导码的形式, 然后是一系列以逗号分隔的字符串或序列 一对括号之间的表达,后跟一个可选的 后记。前导码以包含在其中的每个字符串为前缀 然后将括号和后记附加到每个结果上 字符串,从左向右扩展。
当你在大括号展开后引入一个空格( Backspace 后跟两个空格是空格!)时,以下标记不再被视为 postscript 并单独扩展。