В:
echo $IFS
вы не заключили переменную в двойные кавычки, содержимое переменной находится под воздействием оператора glob + split во всех оболочках типа Борна, кроме zsh
:
echo glob(split($IFS))
Символы в IFS
используются для разделения, поэтому $ IFS
расширен до нуля, вы получили только пустую строку из echo
.
Когда вы заключаете в двойные кавычки "$ IFS"
, содержимое IFS
передается в эхо как есть, вы получаете пробел, табуляцию и новую строку, которые являются значения по умолчанию IFS
. Директива
% q
команды printf
является расширением ksh
, bash
и zsh
, которое выводит строка в формате, который можно повторно использовать в качестве входных данных оболочки, но это не влияет на раскрытие переменных оболочки.
Предполагая, что вы используете исходные пакеты ядра и не перенастроили pacman вручную, вам не нужно это делать.
Вы можете легко это проверить, посмотрев отметку времени в /boot/initramfs -linux.img. Если он новее, чем /boot/vmlinuz -linux.img, значит, initramfs был не нужно вручную обновлять его.