Uma matriz pode ser o primeiro argumento para uma função? [duplicado]

0

Eu tenho uma função que um dos argumentos é uma string que tem palavras separadas por espaços.
Por exemplo. "foo bar ccc"
Eu acho que esse tipo de string pode ser tratado como uma "matriz" e loop sobre cada palavra.
Minha pergunta é se eu preciso passar isso como um argumento para uma função pode ser o primeiro argumento ou vai criar problemas?
Eu tentei como um primeiro argumento e funciona, mas eu não tenho certeza se há alguma armadilha que eu preciso ter cuidado

    
por Jim 22.09.2018 / 16:11

1 resposta

1

Essa é uma string, não uma matriz real. Mas sim, você pode passar uma string com espaços para uma função, como o primeiro argumento ou como qualquer outro.

set -f
f() {
    IFS=' '
    for x in $2; do echo "> $x"; done
}
liststr="foo bar ccc"
f something "$liststr" somethingelse

Lembre-se de que, se você usar uma expansão sem aspas para dividir a string, as palavras resultantes também passarão por globbing, o que pode ou não ser o que você deseja. Você pode desativar globbing (globalmente) com set -f , como acima.

Mas desde que você marcou isso com o Bash, você provavelmente deve usar uma matriz adequada e passar o nome da matriz para usar com uma variável nameref ou apenas dividir a matriz para separar os argumentos ao chamar a função.

Veja:

por 22.09.2018 / 18:07