这是我的代码:
for num in {0001..1000}; do
cd ${num}_1000_solar
sed -i '827s/.*/ if(BigUni==1) fp910=fopen("biguni_${num}.dat","w");/' binary.c
gcc singl.c binary.c -lm
cd ..
done
sed命令将'{num}'写入文件,而不是从循环中输入适当的值。如何用字符串+某个变量替换一行?
干杯!
答案 0 :(得分:2)
如果shell要解释${num}
,它必须是双引号(或引号外),而不是单引号。
for num in {0001..1000}
do
(
cd ${num}_1000_solar
sed -i '827s/.*/ if (BigUni==1) fp910=fopen("biguni_'"${num}"'.dat","w");/' binary.c
gcc singl.c binary.c -lm
)
done
有1000个程序,您在源代码中更改文件名并重新编译(每次a.out
)是滥用C.您应该将文件名作为参数传递给程序。换句话说,练习只是必要的,因为设置存在严重缺陷。
另外,作为一般规则,我可以避免cd subdir
稍后在脚本中使用cd ..
。通过运行子shell(修订后的脚本中的(
和)
),调用shell进程不受目录更改的影响。最终,它更可靠。