Como passar argumentos com espaços para uma função de script de shell? [duplicado]

10

Estou tentando passar vários argumentos para uma função, mas um deles é composto por duas palavras e eu quero que a função shell lide com isso como um argumento:

args=("$@")
function(){
 echo ${args[0]}
 echo ${args[1]}
 echo ${args[2]}
}

quando eu chamo este comando sh shell hi hello guys bye

Eu entendo isso

hi

hello

guys

Mas o que eu realmente quero é:

hi 
hello guys
bye
    
por user78050 23.08.2014 / 20:18

2 respostas

8

Você deve apenas citar o segundo argumento.

myfunc(){
        echo "$1"
        echo "$2"
        echo "$3"
}

myfunc hi "hello guys" bye
    
por 23.08.2014 / 20:28
7

Se for chamado a partir de qualquer shell Unix, você precisa citá-lo.

sh shell hi "hello guys" bye

Não há como fazer isso no script, pois não há como o script saber quais espaços são quais (quais palavras estão juntas).

    
por 23.08.2014 / 20:22