表達式{,}
如何工作?尋找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,}'則反過來。使用應該是不言而喻的。這個墮落的案件仍然有效......那麼,爲什麼有人會不顧一切地拒絕呢? –