1

我正在尝试编写一个脚本来执行几个不同的 java/r 程序,但是我在使用 bash 中的数组中的值时遇到了问题。这是我的例子:

INPUTS[0]=$1 #file
INPUTS[1]=$2 #file
INPUTS[2]=$3 #file
INPUTS[3]=$4 #file
TARGET=$5 #file
OUTPUTS[0]=$6 #file
OUTPUTS[1]=$7 #file
OUTPUTS[2]=$8 #file
OUTPUTS[3]=$9 #file
TYPE=$10 #file
PANEL=$11 #String

for ((X=0;X<${#INPUTS[@]};X++));do #for every file in this array
   CURRENT="${INPUTS[X]}" #look at current in file
   CURRENTOUT="${OUTPUTS[X]}" #and current out file
   #this is working just fine. I put in a file myfile.txt and it makes a new file **results.txt**
   java -jar javathing.jar INPUT=$CURRENT TARG=$TARGET OUTPUT=$CURRENTOUT IS=True #run this
   #This is throwing an error because it can't find **results.txt0**
   java -jar morejava.jar -i $CURRENTOUT -o $TYPE #then this
done
Rscript rthing.R $TYPE $PANEL #finally

所以我的第一个 java 用正确的文件名输出正确的文件 - results.txt

但是当我的第二个 java 程序去查找它时,它会查找不正确的名称。它寻找 results.txt0

我对每个变量都使用相同的变量,但它似乎没有相同的效果。谁能解释这种行为?

4

1 回答 1

3

修复这些行:

TYPE=$10 #file
PANEL=$11 #String

他们应该是:

TYPE=${10} #file
PANEL=${11} #String

bash手册页:

当扩展包含多个单个数字的位置参数时,必须将其括在大括号中(参见下面的 EXPANSION)。

你写的被解释为:

TYPE=${1}0
PANEL=${1}1
于 2013-10-11T17:21:52.850 回答