【问题标题】:Why is my sed command not calling out my variable c?为什么我的 sed 命令没有调用我的变量 c?
【发布时间】:2018-09-12 04:58:13
【问题描述】:

下午好,这是我的 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 的值。请问有什么建议吗?

【问题讨论】:

  • 也许您需要$() 或在分配了c 的表达式周围加上反引号。
  • 欢迎来到 Stack Overflow。请注意,在这里说“谢谢”的首选方式是投票赞成好的问题和有用的答案(一旦你有足够的声誉这样做),并接受对你提出的任何问题最有帮助的答案(这也给出了你的声誉小幅提升)。请查看About 页面以及How do I ask questions here?What do I do when someone answers my question?
  • 欢迎来到 Stack Overflow!抱歉,这不是 StackOverflow 的工作方式。 “这是我的一堆代码,请为我调试”形式的问题被认为是题外话。请访问help center 并阅读How to Ask 了解更多信息。

标签: bash for-loop sed


【解决方案1】:

线

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

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

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

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

  • 双引号的全部意义在于环境变量确实在其中扩展。
  • 点匹配任何单个字符。您需要对其进行转义以匹配文字句点。

该命令应如下所示:

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

你真的不需要在每一行的末尾加分号,虽然我想这不会有什么坏处。

【讨论】:

  • 非常感谢!你是对的 $(...) 成功了。我什至不需要更改 TS 线。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2021-03-12
  • 1970-01-01
相关资源
最近更新 更多