繁体   English   中英

带有变量的Linux cp

[英]Linux cp with variables

我想复制一个由Linux bash文件中的变量指定的文件。

这是怎么回事工作:

molecules = (1butene E2butene)
for molecule in ${molecules[*]}
do
    ### some stuff (works)
    formchk $molecule.chk $molecule.fchk
    ### cp doesn't work
    cp $molecule.com ${molecule}_scan.com
done

有任何想法吗?

编辑:当我删除空格周围的“ =”时,它也不起作用。 cp不会引发任何错误,但是我没有得到另一个名为Molecular_scan.com的文件

我可以看到的主要问题是作业中=周围的空格:

molecules=(1butene E2butene)
for molecule in "${molecules[@]}"
do
  ### some stuff (works)
  formchk "$molecule.chk" "$molecule.fchk"
  ### cp doesn't work
  cp "$molecule.com" "${molecule}_scan.com"
done

我更改的其他内容是使用@而不是* ,以将数组扩展为循环的单词列表。 我还为所有变量扩展添加了引号,尽管在这种特定情况下没有必要,但这是一个很好的习惯。

删除作业中的空白:

molecules=(1butene E2butene)

外壳在空格处分隔单词,并且赋值必须读取name=value

请注意,在您的特定情况下,您不需要非标准的shell数组。 只需写

molecules="1butene E2butene"
for molecule in $molecules
do
  ### some stuff (works)
  formchk $molecule.chk $molecule.fchk
  ### cp doesn't work
  cp $molecule.com ${molecule}_scan.com
done

如果您无法弄清为什么脚本中的某些内容无法按预期运行,可以通过在脚本的其余部分之前添加带有set -x的行来跟踪执行情况。

似乎这是下划线的问题,这有效:

cp $molecule.com ${molecule}\_scan.com

无论如何,谢谢您的帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM