Вы пропустили случай, когда он показывает, что *
расширяет массив до одной строки, а @
расширяет до отдельных строк в кавычках:
printf 'string "%s"\n' "${cape[*]}"
, который генерирует
string "Ping Pong King Kong King Fisher Club Blurb"
и
printf 'string "%s"\n' "${cape[@]}"
, который генерирует
string "Ping Pong"
string "King Kong"
string "King Fisher Club"
string "Blurb"
Помните, что echo
просто объединяет свои аргументы и печатает их, в то время как printf
заполняет свою строку формата аргументами и повторяет тот же формат, если предоставлено больше аргументов.
Кроме того,
for s in "${cape[*]}"; do
echo "$s"
done
генерирует одну строку вывода (он повторяет только одну строку ), а
for s in "${cape[@]}"; do
echo "$s"
done
генерирует по одному элементу массива.
Вы всегда должны использовать двойные кавычки вокруг расширений ${array[*]}
и ${array[@]}
, если вы по какой-то причине не хотите явно вызывать разбиение слов и подстановку имен файлов.И вы используете *
или @
в зависимости от того, нужны ли вам элементы массива все вместе как одна строка или по отдельности.
По моему опыту, очень редко используется [*]
.
При получении длины массива не имеет значения, какой из *
или @
вы используете. Но если вы не используете ни то, ни другое, вы получите длину в символах первого элемента массива.
Вы можете (и должны )определенно сжимать файловую систему перед сжатием раздела, хотя и не обязательно, -если вы сначала сжимаете раздел, если вы не создаете новый раздел, ничего должен писать в новое пустое пространство, но это все еще кажется опасным.
Если вы говорите об увеличении файловой системы, вы можете перезаписать некоторое пространство после раздела (, например. с суперблочными копиями ). Опять же, это может работать, если ничто не записывает в (официально )пустое пространство перед изменением размера файловой системы, но resize2fs
обычно не выходит за пределы размера раздела.
Обратите внимание, что ваш пример выглядит как изменение размера всего диска и использование файловой системы в режиме без разделов. В этом случае уменьшение размера диска перед файловой системой может (и, скорее всего, )приведет к повреждению файловой системы, в то время как увеличение файловой системы должно выполняться после увеличения размера диска.