2

表达式是如何{,}工作的?

我尝试搜索 SOF 以及 google 甚至 bash 的手册页,但我无法找到对此的解释。

通过摆弄表达式,我了解到它是某种字符串复制功能。

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

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

4

2 回答 2

3

这称为大括号扩展

这是一个简单的解释。

  • {,}将通过附加空字符串重复左相邻字符串 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

链接到文档

于 2017-08-14T20:07:22.797 回答
2

大括号扩展的“正常”用例是重复一个字符串,其中一个子字符串替换为花括号中给出的列表的每个元素:

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

现在,如果所有元素都为空{,},则字符串的打印次数与列表元素的数量一样多。

于 2017-08-14T20:12:13.857 回答