2017-04-04 35 views
0

我想用捲曲擴展來保存一些輸入。用字符串中的空格進行Bash捲曲擴展

我的慾望膨脹:

-e uncore_imc0/cas_count_read/ -e uncore_imc1/cas_count_read/ -e uncore_imc2/cas_count_read/ -e uncore_imc3/cas_count_read/ -e uncore_imc4/cas_count_read/ -e uncore_imc5/cas_count_read/ -e uncore_imc6/cas_count_read/ -e uncore_imc7/cas_count_read/ 

我已經試過:

-e uncore_imc{0..7}/cas_count_read/ 

但這只是(僅在年初-e)擴大到

-e uncore_imc0/cas_count_read/ uncore_imc1/cas_count_read/ uncore_imc2/cas_count_read/ uncore_imc3/cas_count_read/ uncore_imc4/cas_count_read/ uncore_imc5/cas_count_read/ uncore_imc6/cas_count_read/ uncore_imc7/cas_count_read/ 

如果我試過了:

{-e, uncore_imc{0..7}/cas_count_read/} 

"-e uncore_imc{0..7}/cas_count_read/" 

無論將擴大。

+1

嘗試' 「-e uncore_imc」{0..7}/cas_count_read /' – 123

+1

@ 123,其導致'-e uncore_imc0/cas_count_read'是單個字傳遞給命令作爲一個參數,而不是兩個單獨的參數'-e'和'uncore_imc0/cas_count_read'。 – chepner

+0

@ 123,您的解決方案實際上適用於我。看起來只要字符串(帶/不帶引號)沒有空格連接起來,它會擴展整個事物,這很好! – Patrick

回答

1

您可以使用printf

printf -- '-e uncore_imc%d/cas_count_read/ ' {0..7}; echo 

-e uncore_imc0/cas_count_read/ -e uncore_imc1/cas_count_read/ -e uncore_imc2/cas_count_read/ -e uncore_imc3/cas_count_read/ -e uncore_imc4/cas_count_read/ -e uncore_imc5/cas_count_read/ -e uncore_imc6/cas_count_read/ -e uncore_imc7/cas_count_read/ 

您還可以將這種擴張在這樣的變量:

printf -v arg -- '-e uncore_imc%d/cas_count_read/ ' {0..7} 
1

如果這真的是一個腳本,不要用括號展開。您只需編寫一次代碼,因此可讀性應該是更高的優先級。建立一個數組代替:

opts=() 
for((i=0; i < 8; i++)); do 
    opts+=(-e "uncore_imc$i/cas_count_read/") 
done 

someCommand "${opts[@]}"