2017-08-28 134 views
0

我有一个简单的bash脚本,它打印另一CSH脚本数次:动态变量循环

for j in $(seq 2 10) 
do 
printf "#!/bin/csh 
set cnt = ${j} 

set cnt2 = ${j}+1 > "prod_${j}.ll" 
done 

在此,循环的每一步,我需要定义CNT2为“$ {}Ĵ+1”(例如如果j = 2,CNT2应为3等) 和比返回到原来的$Ĵ,在印刷文件的名称定义它值

> "prod_${j}.ll" 

回答

0

也许最简单的方法是使用另一个变量,我已经使用k here:

for j in $(seq 2 10) 
do 
    k=$((j+1)) 
    printf "#!/bin/csh 
set cnt = ${j} 

set cnt2 = ${k} > "prod_${j}.ll"\n" 

done 

它没有太大的关系,但它似乎并不值得使用printfecho是有点简单,不需要其后的换行符。同样,变量名称周围的大括号在这里是不必要的,但如果你喜欢打字花括号,则不会造成任何伤害。

+0

是的,谢谢你的作品!如果我使用“while”循环更改“for循环”,脚本会更有效吗? –

+0

我对此表示怀疑。 shell脚本中最大的低效率通常是使用外部过程,最大的罪魁祸首是不必要地使用'cat'。使用'printf'有时效率不高,因为它不是内置于所有的shell。如果我的答案可以接受,那么请接受它作为解决方案。 – cdarke