在bash中获取数组的元素

在bash中获取数组的元素,bash,Bash,我有一个vars: 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”,如果我键入: 以美元回购的回购 做 echo$REPO[1] 完成 我得到“第一个[1]”和“第一个[1]” 如果我键入以下内容: fo

我有一个vars:

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”,如果我键入:

以美元回购的回购 做 echo$REPO[1] 完成

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

如果我键入以下内容:

 for REPO in $REPOS
   do
    echo ${REPO[1]}
   done
我什么也得不到

我可以做些什么来获取循环中的元素?我在寻找,但我没有找到任何有效的


谢谢

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[*]}
命令打印数组

您可以使用间接
${!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

可以将两个数组与

REPOS=( "${REPO_ZERO[@]}" "${REPO_ONE[@]}" )
for repo in "$REPOS[@]}"; do
    echo "$repo"
done

正如所说的,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
将REPOS数组中的每一行传递给另一个名为REPO的数组


我用过这个,效果很好。如果您还有任何问题,请随时提问。

Bash不支持多维数组。谢谢,我将改变一些想法,我认为这会起作用。我已经使用了这个,并且有效……嗯,您是否尝试过使用glob字符?拆分字符串是一种可怕且不受欢迎的方法。我根据您的用例在答案中列出了这一行,它帮助我解决了手头的一个问题
REPO=($REPOLINE)