2011-08-24 83 views
2

這是一個困擾我的問題 - 我需要從用戶輸入中讀取版本號,並且我想使用存儲版本號的數組長度創建一個「菜單」。然而,bash的神祕語法是沒有幫助我在這裏:BASH數組索引減去最後一個數組

echo $VERSIONS 
2.0.10-1 2.0.7-1 2.0.7-1 2.0.7-1 2.0.10-1 

for v in ${!VERSIONS[*]} 
do 
    echo "$(($v+1))) ${VERSIONS[$v]} " 
done 

輸出

1) 2.0.10-1 
    2.0.7-1 
    2.0.7-1 
    2.0.7-1 
    2.0.10-1 
2) 2.0.7-1 
3) 2.0.7-1 
4) 2.0.7-1 
5) 2.0.10-1 

另一個命令

for v in ${!VERSIONS[*]} 
do 
    echo "$(($v+1))) ${VERSIONS[$v+1]} " 
done 

1) 2.0.7-1 
2) 2.0.7-1 
3) 2.0.7-1 
4) 2.0.10-1 
5) 

我真的很想有就是這樣一個輸出:

1) 2.0.7-1 
2) 2.0.7-1 
3) 2.0.7-1 
4) 2.0.10-1 

機智^ h出的最後5)....

樂意解開如何做到這一點在bash ...

附:我的一位同事剛剛提供了一種沒有陣列的方式。我張貼只是爲了好玩:

i=1 
for v in $VERSIONS 
do 
    echo "$i) $v" ; i=$(($i+1)) 
done 

輸出

1) 2.0.10-1 
2) 2.0.7-1 
3) 2.0.7-1 
4) 2.0.7-1 
5) 2.0.10-1 

OK,因爲解決方案沒有我的劇本里工作,我會發布一些詳細信息:

for package in $NEWPACKAGES 
do 
    apt-show-versions -a -p $package 
    VERSIONS=$(apt-show-versions -a -p $package | cut -d ":" -f 2 | cut -d " " -f 1) 
    echo $VERSIONS 
    echo "type the number for version you want to install: (type enter to skip)" 

    for i in `seq 1 ${#VERSIONS[@]}`; do 
    echo "$i) ${VERSIONS[$(($i-1))]}"; 
done 

    echo $VERSIONS  
    read version 
    echo "your choice $version" 
    # now the problem is that i can't get this part to work ! 
    apt-get install $package="${#VERSIONS[$version]}" 
done 
+1

其實你的第一個變種運行完美我。也許你只是忘記了一個declare -a將$ VERSIONS標記爲真實數組?看起來這只是一串文字。 –

+0

嗨Speckinius,我已經添加了如何創建VERSIONS,我不知道如何使它成爲一個真正的數組,我將不勝感激 – Oz123

+0

@ Oz123我的答案告訴你,你可以通過'array =($ VERSIONS )' –

回答

1

帶數組的版本,如果你還需要的話。

for i in `seq 1 ${#VERSIONS[@]}`; do 
    echo "$i) ${VERSIONS[$(($i-1))]}"; 
done 
+0

這個解決方案只適用於我的腳本。 – Oz123

+0

版本不是真的和數組,我知道它是這樣的:VERSIONS = $(apt-show-versions -a -p $ package | cut -d「:」-f 2 | cut -d「」-f 1) – Oz123

+0

@ Oz123如果將其更改爲'VERSIONS =($(apt-show-versions -a -p $ package | cut -d「:」-f 2 | cut -d「」-f 1))'',會發生什麼? –

0
VERSIONS=(2.0.10-1 2.0.7-1 2.0.7-1 2.0.7-1 2.0.10-1) 
for i in ${!VERSIONS[@]} ; do echo "$(($i+1))] ${VERSIONS[i]}"; done 
1

所以你確實正在尋找一個客場普通變量轉換爲數組,那就是:

array=($VERSIONS)