for循环shell脚本中出现意外的令牌“完成”错误

时间:2013-06-18 17:13:07

标签: linux bash shell

我收到了意外的“已完成”令牌错误

echo -e "Enter the file stem name"
read filestem
for i in {1..22}
do
    `java -cp /export/home/alun/jpsgcs/ CMorgansToTheta $filestem_$i.INPUT.par $filestem_$i.THETA.par`
done

2 个答案:

答案 0 :(得分:5)

如果Java程序没有向输出写入任何内容,则for循环等效(因为反引号)

for i in {1..22}
do
done

会产生您看到的错误。您可能只想删除反引号以运行程序22次:

echo -e "Enter the file stem name"
read filestem
for i in {1..22}
do
    java -cp /export/home/alun/jpsgcs/ CMorgansToTheta "${filestem}_$i.INPUT.par" "${filestem}_$i.THETA.par"
done

答案 1 :(得分:1)

在Java命令行中:

java -cp /export/home/alun/jpsgcs/ CMorgansToTheta $filestem_$i.INPUT.par $filestem_$i.THETA.par

您正在使用:

$filestem_$i

这相当于:

${filestem_}${i}

因为下划线_在shell中不被视为单词边界,整个filestem_将被视为变量名称。你很可能会使用:

${filestem}_${i}

你能告诉我这个剧本的输出吗?

#!/bin/bash
set -x
echo -e "Enter the file stem name"
read filestem
for i in {1..3}
do
    echo "java -cp /export/home/alun/jpsgcs/ CMorgansToTheta ${filestem}_${i}.INPUT.par ${filestem}_${i}.THETA.par"
done