У меня есть следующие сценарии bash two
a.sh:
#!/bin/bash
./b.sh 'My Argument'
b.sh:
#!/bin/bash
someApp $*
Двоичный файл someApp получает $*
2 аргумента («Мой» и «Аргумент») вместо 1.
Я проверил несколько вещей:
- Запуск someApp только через
b.sh
работает должным образом - Итерировать + повторить аргументы в
b.sh
работе, как ожидалось - Использование
$@
вместо$*
не имеет значения
someApp "$*"
илиsomeApp "$@"
Ответы:
$*
, без кавычек, заменяется двумя словами. Вам нужно процитировать его, чтобыsomeApp
получить единственный аргумент.someApp "$*"
Возможно, вы захотите использовать
$@
вместо этого, чтобыsomeApp
получить два аргумента, если бы вы вызывалиb.sh
какb.sh 'My first' 'My second'
С
someApp "$*"
,someApp
получит единственный аргументMy first My second
. СsomeApp "$@"
,someApp
получил бы два аргумента,My first
иMy second
.источник
$@
и$*
работают идентично.IFS=$'\n'
. Понятия не имею почему.