Ich habe die folgenden zwei Skripte
Asche:
#!/bin/bash
./b.sh 'My Argument'
b.sh:
#!/bin/bash
someApp $*
Die someApp-Binärdatei empfängt $*
als 2 Argumente ('My' und 'Argument') anstelle von 1.
Ich habe verschiedene Dinge getestet:
- Das Ausführen von someApp funktioniert nur
b.sh
wie erwartet - Iterieren + Echo die Argumente in
b.sh
funktioniert wie erwartet - Verwenden
$@
statt$*
macht keinen Unterschied
someApp "$*"
odersomeApp "$@"
Antworten:
$*
, nicht zitiert, erweitert sich auf zwei Wörter. Sie müssen es zitieren, damit essomeApp
ein einzelnes Argument erhält.Es ist möglich , dass Sie verwenden möchten
$@
stattdessen so , dasssomeApp
zwei Argumente erhalten würden , wenn Sie anrufen warenb.sh
alsMit
someApp "$*"
,someApp
würde ein einziges Argument erhaltenMy first My second
. MitsomeApp "$@"
,someApp
würden zwei Argumente erhalten,My first
undMy second
.quelle
$@
und$*
identisch arbeiten.IFS=$'\n'
. Keine Ahnung warum.