我试图用bash文件中的计算浮动变量替换文件中的数字。所以我试图用“km”的值替换1.1111并将其保存在mesh.in文件中。我一直在sed线上出错,我认为浮动变量可能存在问题。 Echo“$ km”确实有效,所以我知道km不是问题
#!/bin/bash
read -p "Angle in degrees : " n1
read -p "bcsa : " n2
cd viv_example_se2d
sed s/^bcsa.\*/"bcsa $n2"/ runfile.viv >temp
mv -f temp runfile.viv
cd ../
for i in $(seq 2 0.5 12)
do
if [ ! -d U*_$i ];then
mkdir U*_$i
fi
printf -v "km" "%.4f\n" $(echo | bc | awk "BEGIN {print 4*3.14159265359*3.14159265359/($i*$i)}")
echo "$km"
cd viv_example_se2d
sed s/1.1111/$km/g mesh_master.in > temp$i
mv -f temp$i mesh.in
cd ../
echo $home/lustre/projects/p057_swin/ogoldman/Ellipse_$n1/U*_$i | xargs -n 1 cp viv_example_se2d/*
done;
答案 0 :(得分:1)
问题是$km
值的换行符。这令人困惑sed
。
据说这个剧本也有点混乱。
当您使用变量时,应引用变量以防止值中的空格和全局字符出现问题。
您不需要xargs
到cp
多个可以通过glob扩展的文件。 cp
很乐意直接复制多个文件。 (哦,还是将多个文件复制到通过该glob生成的目录?)
echo | bc |
命令附近有一个无用的awk
位。
使用sed
/ etc中的完整/相对路径。总体上比{{1}更好。