2017-04-04 58 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[@]}"