Linux cp带变量

时间:2017-01-12 09:59:55

标签: linux bash cp

我想复制一个由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

任何想法?

编辑:当我删除空格arround“=”时它也不起作用。 cp没有抛出任何错误,但是我没有得到名为molecule_scan.com的第二个文件

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

删除作业中的空白:

molecules=(1butene E2butene)

shell在白色空格处分隔单词,分配必须为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来跟踪执行情况。

答案 2 :(得分:-2)

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

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

非常感谢你的帮助:)