在bash中获取Array的元素

时间:2016-02-11 11:04:51

标签: bash

我有这些变种:

REPO_ZERO=('first' 'two'  'three')
REPO_ONE=('1' '2' '3')

REPOS=(
 $REPO_ZERO
 $REPO_ONE
)

我创建了一个迭代它们的循环:

for REPO in $REPOS
 do
  echo $REPO
done

我刚拿到第一个元素“firts”和“1”,好吧,如果我输入这个:

表示$ REPOS中的REPO      做       echo $ REPO [1]     完成

我得到“第一[1]”和“1 [1]”。

如果我输入:

 for REPO in $REPOS
   do
    echo ${REPO[1]}
   done

我一无所获。

如何在循环中获取元素?我正在寻找,但我没有得到任何有用的东西。

感谢。

4 个答案:

答案 0 :(得分:3)

Bash不支持多维数组。

 REPO_ZERO=('first' 'two'  'three')  
 REPO_ONE=('1' '2' '3') 
 REPOS=( $REPO_ZERO $REPO_ONE)

等于:

 REPO_ZERO=('first' 'two'  'three')  
 REPO_ONE=('1' '2' '3') 
 REPOS=('first' '1')

因为$REPO_ZERO$REPO_ONE将返回每个数组的第一个元素。

您可以使用echo ${ARRAY[*]}命令

打印数组

答案 1 :(得分:1)

您可以使用间接${!var}和函数

来获取2d数组的功能
twod(){
    element="$1[$2]"
    echo "${!element}"
}

REPO_ZERO=('first' 'two'  'three')
REPO_ONE=('1' '2' '3')
REPOS=( 'REPO_ZERO' 'REPO_ONE')

for i in "${REPOS[@]}";do

    twod "$i" 2

done

打印

three
3

答案 2 :(得分:0)

您可以使用

连接两个数组
REPOS=( "${REPO_ZERO[@]}" "${REPO_ONE[@]}" )
for repo in "$REPOS[@]}"; do
    echo "$repo"
done

答案 3 :(得分:0)

因为有人说bash不支持多维数组,但是根据你的用例,你可以模拟它。

因此,如果您将数组定义为

REPOS=(
"first two three"
"1 2 3")

您可以显示如下内容

for REPOLINE in "${REPOS[@]}"
do    
   REPO=($REPOLINE)
   for ((i=0;i<=${#REPO[*]};i++));
   do
      echo ${REPO[i]}
   done
done

REPO=($REPOLINE)

将每行从REPOS数组传递到另一个名为REPO的数组。

我用过这个并且有效。如果您有任何其他问题,请随时询问