arrays - BASH 数组索引减去最后一个数组

标签 arrays 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 

没有最后 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

好的,由于解决方案在我的脚本中不起作用,我将发布更多信息:

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

最佳答案

一个带有数组的版本,如果你还需要的话。

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

关于arrays - BASH 数组索引减去最后一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7174354/

相关文章:

c - 多维数组和指向指针的指针

ruby - 如果数组在每次迭代期间更新,array.each 能否正常工作?

C:在数组中搜索非数字字符

linux - 如何将带点的版本号转换为整数?

bash - 如何在 bash shell 中将日期转换为时间戳?

json - 如何从 JSON 字符串中删除子字符串

javascript - 如何过滤 JSON.parse 结果

c# - 查找数组相邻元素之间的最大距离

linux - 比较字符串并将值连接到 bash shell 中的一个字段中

json - 比较 2 个 json 数组并返回差值