bash - 通过索引从数组中提取内容

时间:2016-01-14 18:56:17

标签: arrays bash

我遇到了打印出索引和数组项的脚本的问题,然后允许用户输入将打印出该数组的特定项的索引。

array=(abc def ghi)

i=0
while [ $i -lt ${#array[*]} ]; do
    echo "[$i] ${array[$i]}"
    i=$(($i+1));
done

echo -e "select an index: "; read answer

#this is the part that is troubling me

for index in ${!array[*]}; do
    if [[ $answer == $index ]]; then
        echo ${array[$index]}
        break
    else
        echo "invalid"
        break
    fi
done

所以如果用户输入0,它应该打印abc。 1将是def等。它目前仅适用于指数0.

1 个答案:

答案 0 :(得分:0)

我可以找到一些问题:

  1. 在$ item之后需要一个空格来与]
  2. 分开
  3. $ item应该是$ index
  4. 最重要的是,在“echo invalid”之后删除break,这是在针对'0'测试之后循环退出的原因,并且不检查下一个数组索引。使用标志然后您应该控制答案是否与任何有效索引匹配,否则打印“无效”消息。为了清晰起见,我在那里使用了非常明确的字符串测试。
  5. 正在运行的代码应如下所示:

    array=(abc def ghi)
    i=0
    while [ $i -lt ${#array[*]} ]; do
        echo "[$i] ${array[$i]}"
        i=$(($i+1));
    done
    echo -e "select an index: "; read answer
    
    for index in ${!array[*]}; do
        found="FALSE"
        if [[ "$answer" == "$index" ]]; then
            found="TRUE"
            echo "${array[$index]}"
            break
        fi
    done
    
    if [ "$found" == "FALSE" ]; then
       echo "Invalid input $answer"
    fi