Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中通过扩展获得所需的订单_Bash - Fatal编程技术网

如何在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