Mat*_*bon 4 command-line shell brace-expansion
该命令echo {1..3}-{1,2}
打印1-1 1-2 2-1 2-2 3-1 3-2
. 我了解可以使用这些花括号的方式。但它们究竟是什么?
sh
/的工作是bash
解析/扩展它们并将扩展版本交付给执行的程序吗?
如果是这样,它还能做什么其他技巧,是否有规范?
另外,有名字吗?
ls *.txt
内部是否以类似方式处理?
有没有办法实现一个论点的 n 次重复?喜欢(不工作,当然,只是一个概念)cat test.pdf{*3}
:?cat test.pdf test.pdf test.pdf
?
它们被称为大括号扩展。
它是由bash
,zsh
和完成的几个扩展之一ksh
,文件名扩展*.txt
是其中的另一个。POSIX 标准未涵盖大括号扩展,因此不可移植。您可以在bash 手册中阅读此内容。
根据@Arrow 的建议:为了cat test.pdf test.pdf test.pdf
单独使用大括号扩展,您必须使用这个“hack”:
#cat test.pdf test.pdf
cat test.pdf{,}
#cat test.pdf test.pdf test.pdf
cat test.pdf{,,}
#cat test.pdf test.pdf test.pdf test.pdf
cat test.pdf{,,,}
Run Code Online (Sandbox Code Playgroud)
一些常见用途:
for index in {1..10}; do
echo "$index"
done
touch test_file_{a..e}.txt
Run Code Online (Sandbox Code Playgroud)
或者另一个“hack”来打印一个字符串 10 次:
printf -- "mystring\n%0.s" {1..10}
Run Code Online (Sandbox Code Playgroud)
请注意,括号扩展bash
是在参数扩展之前完成的,因此一个常见的错误是:
num=10
for index in {1..$num}; do
echo "$index"
done
Run Code Online (Sandbox Code Playgroud)
(ksh93
外壳可以解决这个问题)