{,string} 语法如何工作?

0 bash brace-expansion

我很难理解{,string}语法。我主要用它来重命名文件,mv test{,.original}但我不太明白:

echo asdf{,.fdsa}
Run Code Online (Sandbox Code Playgroud)

输出:

asdf asdf.fdsa
Run Code Online (Sandbox Code Playgroud)

asdf asdf.fdsa
Run Code Online (Sandbox Code Playgroud)

输出:

asdfasdf asdf.fdsa
Run Code Online (Sandbox Code Playgroud)

我试图通过阅读这个,我发现了一些类似的模式#?但现在,。它带有这样的想法,即这应该找到模式,但我认为这不是它的作用。

它是如何工作的?

Dev*_*laN 5

这是大括号扩展。在Bash 手册中阅读更多关于它的信息。

它从大括号中的逗号分隔列表中生成每种可能性。

echo asdf{asdf,.fdsa}
asdfasdf asdf.fdsa
Run Code Online (Sandbox Code Playgroud)
  • echo 只是呼应它后面的内容(不是在每种情况下,但为了使事情简单,在这个例子中)
  • asdf{asdf,.fdsa}扩展为两种可能性(因为有一个,符号,所以它将列表分成两部分)。首先我们得到了asdf哪个是不变的部分,然后它与另一个asdf(大括号列表中的第一个项目)连接,然后是空格和另一个asdf连接.fdsa(列出的第二个项目)。

使用与前缀和大括号内相同的字符串时可能会有点混乱,因此为了使事情更清楚,让我们尝试:

$ echo a{,b,.c,def}gh
agh abgh a.cgh adefgh
Run Code Online (Sandbox Code Playgroud)

翻译成

  • a+ 空字符串 + gh=agh
  • a+ b+ gh=abgh
  • a+ .c+ gh=a.cgh
  • a+ def+ gh=adefgh