我有这些变种:
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
我一无所获。
如何在循环中获取元素?我正在寻找,但我没有得到任何有用的东西。
感谢。
答案 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}
和函数
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的数组。
我用过这个并且有效。如果您有任何其他问题,请随时询问