Прохождение $ * с параметрами с пробелами ко второму сценарию

Вы можете посмотреть на живой дистрибутив, такой как GRML, который поддерживает копирование всех файлов squashfs в ОЗУ при загрузке (с использованием аргумента grml2ram ) и который можно легко настроить (см. grml-live ); или вы можете выложить свою систему как initramfs и загрузить загрузчик вместе с ядром.

Менее элегантно, вы могли бы придерживаться стандартного initramfs и добавить к нему сценарий, который загружает содержимое вашей SD-карты в память, а затем использует его в качестве rootfs.

1
26.01.2019, 00:45
1 ответ

Используйте"$@":

./tst2.sh "$@" --some --more --params

Разница между $*и "$@"заключается в том, что $*будет одиночной строкой , состоящей из конкатенации всех позиционных параметров с первым символом $IFSв качестве разделителя (. ] эта строка будет дополнительно подвергнута разбиению на слова -и расширению имени файла, поскольку она не заключена в кавычки ), а"$@"(обратите внимание на двойные кавычки! )будет каждым позиционным параметром в кавычках .

Если вы хотите сохранить отдельные позиционные параметры, всегда используйте "$@".

Если вы хотите объединить позиционные параметры на первом символе $IFSдля создания одиночной строки , используйте "$*". Это редко используется, кроме как при создании текстовых строк в некоторых обстоятельствах.

Редко имеет смысл использовать $*или $@без кавычек.

Краткий пример сравнения "$@"и"$*":

set -- "bumblebee 1" "bumblebee 2"
IFS=,

printf 'With "$@": %s\n' "$@"
printf 'With "$*": %s\n' "$*"

Вывод (с добавленными аннотациями)

With "$@": bumblebee 1               <-- "$1" here
With "$@": bumblebee 2               <-- "$2" here
With "$*": bumblebee 1,bumblebee 2   <-- "$1$IFS$2" here
10
27.01.2020, 23:12

Теги

Похожие вопросы