寻找echo {,} foo的细分

时间:2017-08-14 20:03:41

标签: string bash brace-expansion

表达式{,}如何工作?

我尝试搜索SOF以及谷歌甚至是bash的手册页,但我还没有找到解释。

从摆弄表达式我已经了解到它是某种字符串复制功能。

echo{,} foo
>> echo echo foo
echo foo{,}
>> foo foo

这个表达如何运作?这有名字吗?另外,你能提供一个使用这个功能的实际例子吗?

2 个答案:

答案 0 :(得分:3)

它被称为brace expansion

这是一个简单的解释。

  • {,}将通过附加空字符串重复左侧相邻字符串2次。
  • 同样{,,}将重复左侧相邻字符串3次。
  • var{A,B}将返回varAvarB

这些例子应该澄清更多:

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

Link to the docs

答案 1 :(得分:2)

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,因为第一个列表元素为空。

现在,如果所有元素都是{,}中的空格,则字符串只会打印出与列表元素一样多的次数。