2013-10-11 6 views
1

Я пытаюсь написать скрипт для выполнения нескольких различных программ java/r, но у меня возникла проблема с использованием значения из массива в bash. Вот мой пример:Bash Array Variable

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 выводит правильный файл с правильным файлом name- results.txt

Но когда моя вторая программа Java идет искать его, он ищет неправильное имя. Он ищет results.txt0

Я использую одну и ту же переменную для каждого из них, но она, похоже, не имеет такого же эффекта. Может ли кто-нибудь объяснить это поведение?

+1

Для начала, '' // не Баш символ комментария. –

+0

@CodeGnome У меня нет таких в моем фактическом коде. Я комментировал только ради этой публикации. Есть ли у Stackoverflow символ комментария? Кажется, есть, по крайней мере, 2 нитпеккера, которые я изменю. – 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