exibe matriz em uma função - não está funcionando

0

O que estou perdendo aqui?

Eu criei um array simples:

declare -a appArray=(
    "item1 -a -b"
    "item2 -c -d"
    )

Se eu fizer eco disso, eu posso ver tudo

echo ${appArray[@]}

> item1 -a -b item2 -c -d

Eu então crio uma função da seguinte forma:

fc_DEBUG () { 
    if [ $1 -eq 1 ] ; then 
        echo $2; 
    fi; 
};

Ele é projetado para se encaixar em um script bash e, se eu definir uma variável DEBUG, ele retornará o texto. Assim, posso usá-lo em todo o script sem precisar adicionar / remover manualmente as coisas.

Funciona bem com dados básicos: por exemplo

fc_DEBUG $DEBUG "This is DEBUG text"

Se eu chamar isso com o Array, no entanto, eu só obtenho uma parte do Array.

fc_DEBUG $DEBUG "${appArray[@]}"

> item1 -a -b
    
por IGGt 13.01.2016 / 12:32

1 resposta

3

${appArray[@]} é expandido antes que fc_DEBUG seja executado. Então, o segundo argumento que a função vê é o primeiro da matriz. Para ser explícito, os três argumentos fc_DEBUG vê, são

$DEBUG "item1 -a -b" "item2 -c -d"

(substitua $ DEBUG pelas palavras resultantes do operador split + glob aplicado ao valor real de $ DEBUG (como você esqueceu de citar)). Em termos técnicos, o array é passado por valor, não por referência.

fc_DEBUG () { 
    if [ "$1" -eq 1 ] ; then 
        shift
        echo "$@"
    fi
}

Agora, o primeiro argumento é descartado da lista de argumentos com shift e o restante de todos os argumentos é impresso.

Chame-o com um array entre aspas:

fc_DEBUG "$DEBUG" "${appArray[@]}"
    
por 13.01.2016 / 12:37