Tengo los siguientes scripts de bash dos
ceniza:
#!/bin/bash
./b.sh 'My Argument'
b.sh:
#!/bin/bash
someApp $*
El binario someApp recibe $*
como 2 argumentos ('Mi' y 'Argumento') en lugar de 1.
He probado varias cosas:
- Ejecutar someApp solo
b.sh
funciona como se esperaba - Iterar + hacer eco de los argumentos en
b.sh
funciona como se esperaba - Usar en
$@
lugar de$*
no hace la diferencia
someApp "$*"
osomeApp "$@"
Respuestas:
$*
, sin comillas, se expande a dos palabras. Necesita citarlo para quesomeApp
reciba un solo argumento.Es posible que desee usar
$@
en su lugar, por lo quesomeApp
recibiría dos argumentos si llamarab.sh
comoCon
someApp "$*"
,someApp
recibiría un único argumentoMy first My second
. ConsomeApp "$@"
,someApp
recibiría dos argumentosMy first
yMy second
.fuente
$@
y$*
funcionan de manera idéntica.IFS=$'\n'
. No tengo idea de por qué.