为什么我的sed命令没有调出变量c?

时间:2018-09-12 04:58:14

标签: bash for-loop sed

下午好,这是我的bash代码:

for f in {-20..20};
do
     cd V_$f;
     echo V_$f;
     c= echo "$f /10" | bc -l | xargs printf "%.1f";
     echo $c;
     sed -i -e "s/TS.Voltage 0.0 eV/TS.Voltage "$c" eV/" scattering.fdf;
     cd ..;
done;

以V.sh的名字调用时,结果例如

V_-20
-2.0
...

,依此类推,直到V_20 / 2.0代表我的文件夹以及每个文件中所需的值c。我的问题是,当我查看每个文件夹中的fdf文件以查看命令sed是否有效时,c的值未显示。实际上,我得到的是TS.Voltage "space" eV而不是c的值。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

c= echo "$f /10" | bc -l | xargs printf "%.1f";

读取为“将c暂时清空,然后运行echo / bc / xargs管道”。要将一个或多个程序的结果存储在变量中,请使用$(...)

c=$(echo "$f /10" | bc -l | xargs printf "%.1f")

接下来,您可能要修复sed表达式:

  • 双引号的全部要点是环境变量 do 在其中扩展了。
  • 点匹配任何单个字符。您需要对其进行转义以匹配字面量。

命令应如下所示:

"s/TS\.Voltage 0\.0 eV/TS.Voltage $c eV/"

您确实不需要在每行末尾使用分号,尽管我认为这不会造成伤害。