2016-05-23 9 views
0

私はBashシェル、Linux OSで作業しています。この前Bash for forループの説明

for ((i=0;i<${#listModels[@]};i++)) 
do 
var=${listVersion[$i]} 
if [ ${!var} ] 
then 
    export MY_LIBRARY_PATH=$MY_LIBRARY_PATH:$ROOT_PATH/${listModels[$i]}/${listModels[$i]}_${!var} 
else 
    echo ">>>> No ${listModels[$i]} version! <<<<" 
fi 
done 

、私はスクリプトに次のようにあります:私は、forループを下記の持っている

listModels=(model1 
model2 
model3) 

listVersion=(MODEL1 
MODEL2 
MODEL3) 

概念はMODEL1、MODEL2とMODEL3は、例えば、それのために、すべての今して変化し続けるですMODEL1.1、MODEL2.2となります。そして、私は、listVersion値が変更されるたびに、スクリプトが自分のパスを変更することを期待しています。しかし、どのようにしてforループ関数(特に[@]と[$ i]のもの)がどのくらい正確に説明できるのでしょうか。私はBashが初めてで、基本コマンドだけは知っています。前もって感謝します!

答えて

3

man bashに記載されているように、${#array[@]}は配列の要素数を返します。同様に、${array[$i]}(より良いと書かれた${array[i]})は、配列の$i番目の要素を返します。

#! /bin/bash 
array=(a b c) 
echo Size: ${#array[@]} 
echo First: ${array[0]} 
echo Second: ${array[1]} 
echo Last: ${array[-1]} # Negative index counts from the right! 
+0

IIRC負のインデックスは、if文の中にはbash 4.2 – sjsam

+0

式から許可されている '場合、[$ {!のVAR}]' 'を意味し、私は-th'要素が存在しないのですか? –

+0

@Aditya:いいえ「間接」のために 'man bash'を検索します。 – choroba