$ echo {A,B}{1,2,3}.pdf
A1.pdf A2.pdf A3.pdf B1.pdf B2.pdf B3.pdf
我怎樣可以得到以下的輸出:如何通過擴大在bash獲得所需的順序
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
感謝。
$ echo {A,B}{1,2,3}.pdf
A1.pdf A2.pdf A3.pdf B1.pdf B2.pdf B3.pdf
我怎樣可以得到以下的輸出:如何通過擴大在bash獲得所需的順序
A1.pdf B1.pdf A2.pdf B2.pdf A3.pdf B3.pdf
感謝。
for n in 1 2 3; do for l in A B; do echo -n "$l$n.pdf "; done; done; echo
or
for n in {1..3}; do for l in {A..B}; do echo -n "$l$n.pdf "; done; done; echo
謝謝。 (1)循環範圍'1 2 3'是否是一個列表?我們可以寫得更清楚/明確,以便它是一個列表? (2)我的問題可以在沒有循環的情況下完成嗎? – Tim 2014-09-24 02:45:56
@Tim你會如何「更清楚/更明確地寫清楚」作爲清單?你的意思是擴張嗎? – 2014-09-24 02:47:15
@Tim:1 2 3被視爲字符串。你可以使用$(seq 1 3)來獲得一個可編程序列。有些命令會映射ascii以從A B C獲得相同的效果,同時適用所有的注意事項。我不認爲你沒有循環就可以做到。 bash的文檔說,從左到右的順序被保留在括號擴展中。 – Leo 2014-09-24 02:49:02
$ 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
簡單loop
應易於擴展和閱讀:
$ 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
這不是作弊。這很聰明! – 2014-09-24 05:22:54
與所有的[通常的警告(http://mywiki.wooledge.org/ParsingLs),'LS [AB] [123] .pdf |排序-V' – tripleee 2014-09-24 05:39:54