2011-08-24 49 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)