表达式{,}
如何工作?寻找echo {,} foo的故障
我试着搜索SOF以及谷歌,甚至为bash的手册页,但我还没有能够遇到这样的解释。
从摆弄这个表达式我发现它是某种字符串复制函数。
echo{,} foo
>> echo echo foo
echo foo{,}
>> foo foo
这个表达式是如何工作的?有没有这个名字?另外,您能否提供使用此功能的实际示例?
表达式{,}
如何工作?寻找echo {,} foo的故障
我试着搜索SOF以及谷歌,甚至为bash的手册页,但我还没有能够遇到这样的解释。
从摆弄这个表达式我发现它是某种字符串复制函数。
echo{,} foo
>> echo echo foo
echo foo{,}
>> foo foo
这个表达式是如何工作的?有没有这个名字?另外,您能否提供使用此功能的实际示例?
“正常” 使用情况brace expansion是重复一个字符串的子串被大括号中的每个元素替换:
$ echo file.{txt,dat,log}
file.txt file.dat file.log
现在,如果列表中的元素之一是空的,字符串被打印成是:
$ echo file.{txt,dat,}
file.txt file.dat file.
一个流行的用例,这是重命名文件
$ mv -v file.txt{,.bak}
'file.txt' -> 'file.txt.bak'
这扩大到mv -v file.txt file.txt.bak
,因为第一个列表元素是空的。
现在,如果全部为元素为空,如{,}
,则该字符串的打印次数与列表元素的次数相同。
它叫做brace expansion。
下面是一个简单的解释。
{,}
将通过附加空字符串重复左边相邻的字符串两次。{,,}
将重复左边相邻的字符串正好3次。var{A,B}
将返回varA
和varB
,并且这些例子应该澄清更多:
echo foo{,,}
foo foo foo
echo foo{,1}
foo foo1
echo foo{1,2}
foo1 foo2
echo foo{,,}
foo foo foo
echo foo{1,2,3}
foo1 foo2 foo3
它被称为“支架扩展”。 '{,}'使用两个空字符串,在我看来这有点奇怪。 –
'mkdir example- {foo,bar,baz} .d'创建'example-foo.d','example-bar.d'和'example-baz.d'; 'mv foo {,。txt}'将'foo'重命名为'foo.txt',而'mv foo {.txt,}'则反过来。使用应该是不言而喻的。这个堕落的案件仍然有效......那么,为什么有人会不顾一切地拒绝呢? –