В оболочке POSIX sh
у вас есть ровно один массив:$@
(массив позиционных параметров, то есть $1
, $2
,... ). Вы устанавливаете его значения с помощьюset
:
set -- curl git htop mc tree vim
или из командной строки:
./myscript.sh curl git htop mc tree vim
Затем,
apt --yes install "$@"
Заключение раскрытия $@
приводит к тому, что массив расширяется до элементов в кавычках . То есть, если массив $@
содержит a word
и another word
, "$@"
будет расширен до этих двух строк . Отсутствие кавычек $@
приведет к расширению до четырех строк a
, word
, another
и word
. Поведение без кавычек зависит от содержимого $IFS
.
Обратите внимание, что в bash
вы также хотели бы заключить в двойные кавычки расширение ${PACKAGES[@]}
:
apt --yes install "${PACKAGES[@]}"
Связанные:Массивы в Unix Bourne Shell
Вы не на самом деле "соединяете элементы пробелами" здесь. Да, если вы echo
значения, вы получите пробелы между ними, но это разница между
set -- a b c d
printf '>%s<\n' "$@"
, что дает
>a<
>b<
>c<
>d<
(четыре отдельных аргумента, как вам и нужно)
и
printf '>%s<' "$*"
, что дает
>a b c d<
(один единственный аргумент с элементами , соединенными пробелами(первый символ $IFS
), что на самом деле не то, что вы хотите использовать с вашей командой apt install
)
Я бы попытался повторить процесс установки GRUB (Если кажется, что хотя бы grub загружается, вы можете пропустить шаг 3):
mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
chroot /mnt
grub-install --target=x86_64-efi --efi-directory=/mnt
grub-mkconfig -o /mnt/grub/grub.cfg
https://fosswire.com/post/2009/05/restoring-overwritten-grub/