Использовать подстановку строк для объединения массива?

Во-первых, это ужасная идея. IgnorePkgпредполагается, что это временная мера, поскольку она, по сути, вызывает частичные обновления , а не то, что является вашим де-факто подходом к управлению пакетами для непрерывного выпуска.

Сказав это, было бы относительно просто создать функцию для достижения вашей цели.

fullupgrade() { pacman -Syu $(awk -F= '/^IgnorePkg/ {print $NF}' /etc/pacman.conf) ; }

0
12.03.2021, 22:21
1 ответ

Если вы хотите вывести строку, состоящую из элементов массива, разделенных определенным символом, используйте

words=(a b c)

( IFS=,; printf '%s\n' "${words[*]}" )

Использование *вместо @в "${words[*]}"создаст единую строку из объединения всех элементов массива words. Элементы будут разделены первым символом $IFS, поэтому мы установили запятую перед расширением.

Я установил IFSв подоболочке, чтобы избежать непреднамеренной установки его для любой другой операции, кроме единственного расширения, необходимого для создания строки с разделителями-запятыми -для вызова printf.

Вместо того, чтобы использовать подоболочку для локальной установки IFS, вы можете вместо этого установить ее, а затем сбросить:

words=(a b c)

IFS=,$IFS
printf '%s\n' "${words[*]}"
IFS=${IFS#?}

Это сначала добавляет запятую в качестве первого символа $IFS, сохраняя старое значение переменной в виде символов после запятой.

Подстановка параметра ${IFS#?}удалит первый символ (запятую, которую мы добавили ).

4
18.03.2021, 23:13

Теги

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