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で正しいファイルを出力します

しかし、私の 2 番目の Java プログラムがそれを探しに行くと、間違った名前を探します。results.txt0 を探します

それぞれに同じ変数を使用していますが、同じ効果はないようです。誰でもこの動作を説明できますか?

4

1 に答える 1

3

次の行を修正します。

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

彼らはする必要があります:

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

bashマニュアルページから:

1 桁以上の位置パラメータを展開する場合は、中括弧で囲む必要があります (下記の EXPANSION を参照)。

あなたが書いたものは次のように解釈されました:

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