如何在bash中通过扩展获得所需的订单
如何获得以下输出:如何在bash中通过扩展获得所需的订单,bash,Bash,如何获得以下输出: $ echo {A,B}{1,2,3}.pdf A1.pdf A2.pdf A3.pdf B1.pdf B2.pdf B3.pdf 谢谢。大括号扩展的结果未排序,并保留从左到右的顺序 A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf 为了实现您想要的输出,您可以执行以下操作,但您可以看到它会变得多么复杂 $ for n in 1 2 3; do printf '%s ' {A,B}"$n.pdf"; done; echo A1.pdf
$ echo {A,B}{1,2,3}.pdf
A1.pdf A2.pdf A3.pdf B1.pdf B2.pdf B3.pdf
谢谢。大括号扩展的结果未排序,并保留从左到右的顺序
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
为了实现您想要的输出,您可以执行以下操作,但您可以看到它会变得多么复杂
$ for n in 1 2 3; do printf '%s ' {A,B}"$n.pdf"; done; echo
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
$ for n in 1 2 3; do echo -n {A,B}"$n.pdf "; done; echo
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
$ for n in 1 2 3; do echo -n {A,B}"$n.pdf"; echo -n " "; done; echo
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
# One of the relatively rare times where not quoting a command substitution is useful.
$ echo $(printf %s\\n {A,B}{1,2,3}.pdf | sort -k1.2,1.2)
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
# Same idea as above but with different all-on-one line mechanism.
$ printf %s\\n {A,B}{1,2,3}.pdf | sort -k1.2,1.2 | tr '\n' ' '; echo
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
简单的循环
应易于缩放和读取:
$ echo {{A,B}1,{A,B}2,{A,B}3}.pdf
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
我使用了一个中间数组来存储扩展的名称。你可以选择打印它们作为你的遭遇。我假设你的意图是在它们生成后对它们做些什么 我认为这是欺骗,但它确实提供了所需的输出:
$ for n in {1..3}; do list+=( {A..B}$n.pdf ); done; echo "${list[@]}"
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
谢谢(1) 循环范围
1 2 3
是列表吗?我们能把它写得更清楚/更明确些吗,这样它就是一个列表?(2) 我的问题可以不用循环吗?@Tim你会如何“写得更清楚/更明确”作为一个列表?你是说大括号扩展吗?@Tim:13被视为字符串。您可以使用$(seq 13)获得一个可编程序列。有一些命令将映射ascii以从B C获得相同的效果,所有的注意事项都适用于此。我认为没有循环你是做不到的。bash的文档说从左到右的顺序保留在大括号展开中。大括号展开也可以处理字母<代码>回音{A..C}有效。这不是作弊。真聪明!使用所有的,ls[AB][123].pdf | sort-V
$ for n in {1..3}; do list+=( {A..B}$n.pdf ); done; echo "${list[@]}"
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
echo fdp.{3,2,1}{B,A} | rev