Eu tenho o seguinte bash dois scripts
cinza:
#!/bin/bash
./b.sh 'My Argument'
b.sh:
#!/bin/bash
someApp $*
O binário someApp recebe $*
2 argumentos ('Meu' e 'Argumento') em vez de 1.
Eu testei várias coisas:
- Executar someApp apenas
b.sh
funciona conforme o esperado - Iterar + repetir os argumentos nas
b.sh
obras conforme o esperado - Usar em
$@
vez de$*
não faz diferença
someApp "$*"
ousomeApp "$@"
Respostas:
$*
, sem aspas, se expande para duas palavras. Você precisa citá-lo para quesomeApp
receba um único argumento.É possível que você queira usar em
$@
vez disso, de modo quesomeApp
receberia dois argumentos se você chamasseb.sh
comoCom
someApp "$*"
,someApp
receberia um único argumentoMy first My second
. ComsomeApp "$@"
,someApp
receberia dois argumentos,My first
eMy second
.fonte
$@
e$*
funcionam de forma idêntica.IFS=$'\n'
. Não faço ideia do porquê.