我想复制一个由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的第二个文件
答案 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
非常感谢你的帮助:)