2016-02-11 79 views
-1

數組元素我有這個瓦爾:獲取在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 做 回聲$ REPO [1] 做

我得到「第一[1]」和「1 [1]」。

如果我輸入:

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

我什麼也沒得到。

我能做些什麼來獲得循環內的元素?我在尋找,但我沒有得到任何有效的東西。

謝謝。

+2

Bash不支持多維數組。 –

回答

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[*]}命令打印您陣列

+0

謝謝,我會改變一些想法,我認爲這會起作用。 –

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 
0

您可以連接排序獲得二維數組的功能兩個陣列與

REPOS=("${REPO_ZERO[@]}" "${REPO_ONE[@]}") 
for repo in "$REPOS[@]}"; do 
    echo "$repo" 
done 
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的數組。

我已經使用這個和工作。隨意詢問您是否有任何問題

+0

_I已經使用過這個和works_ ... mmmhhhh,你有沒有用glob字符試過它?分割字符串的方法是一種令人恐懼和不滿的方式。 –

+0

我的答案是基於你的使用案例,它有助於我解決手頭的問題 – mdem