这是一个困扰我的问题 - 我需要从用户输入中读取版本号,并且我想使用存储版本号的数组的长度来创建“菜单”。但是,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中做到这一点......
P.S。我的一位同事提供了一种没有阵列的方法。我发布它只是为了好玩:
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
答案 0 :(得分:1)
包含数组的版本,如果您仍需要数组。
for i in `seq 1 ${#VERSIONS[@]}`; do
echo "$i) ${VERSIONS[$(($i-1))]}";
done
答案 1 :(得分:1)
所以你确实在寻找一个将普通变量转换为数组的方法,这里是:
array=($VERSIONS)
答案 2 :(得分: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