這是一個困擾我的問題 - 我需要從用戶輸入中讀取版本號,並且我想使用存儲版本號的數組長度創建一個「菜單」。然而,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
其實你的第一個變種運行完美我。也許你只是忘記了一個declare -a將$ VERSIONS標記爲真實數組?看起來這只是一串文字。 –
嗨Speckinius,我已經添加了如何創建VERSIONS,我不知道如何使它成爲一個真正的數組,我將不勝感激 – Oz123
@ Oz123我的答案告訴你,你可以通過'array =($ VERSIONS )' –