2013-10-11 213 views
1

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

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

+1

对于初学者来说,''//不是猛砸注释字符。 –

+0

@CodeGnome我没有在我的实际代码中。我只是为了这篇文章而发表评论。 Stackoverflow是否有评论字符?因为它似乎至少有2个nitpickers我会改变它。 – user2076476

+0

使用您正在编写的语言的注释字符。 bash的## – Barmar

回答

3

修复这些行:

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

他们应该是:

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

bash手册页:

当由多于一个数字的位置参数扩展后,它必须用括号括起来(参见下面的扩展)。

你所写的解释为:

TYPE=${1}0 
PANEL=${1}1 
+0

我为什么要为这两个变量做这件事,但其他的都没有? – user2076476

+0

由于其他位置参数只有1位数。 – Barmar

+0

如果你喜欢,你可以使用大括号,你只是不需要_need_。 – Barmar