«Echo $ IFS» не возвращает значение IFS

Я установил IFS в x , то есть IFS=x . Теперь, если я проверю значение IFS , тогда он кажется пустым, если я не использую двойные кавычки:

 ~ $ echo $IFS | cat -e $ ~ $ echo "$IFS" | cat -e x$ ~ $ echo $HOME /home/mar ~ $ echo "$HOME" /home/mar ~ $ 

Как видно выше, $HOME не ведет себя так. В чем причина такого поведения?

2 Solutions collect form web for “«Echo $ IFS» не возвращает значение IFS”

После того, как переменная расширяется, происходит разбиение слов, и оно разбивается на пустое слово (слова). Разделение выполняется с использованием каждого символа переменной IFS качестве разделителя, и поскольку $IFS только расширяется до символов в IFS он разбивается на пустое слово (ы).

Так, например:

 IFS=xxx; printf %q $IFS ''''''[root@localhost ~]# 

И если вы дважды цитируете, вы говорите bash, чтобы рассматривать все внутри кавычек как одно слово:

 printf %q "$IFS" xxx[root@localhost ~]# 

Я думаю, это связано с тем, что указано в Advanced Bash-Scripting Guide

Используйте двойные кавычки, чтобы предотвратить разделение слов. [2] Аргумент, заключенный в двойные кавычки, представляет собой одно слово, даже если он содержит разделители пробелов.

С примерами (5.1):

 var="'(]\\{}\$\"" echo $var # '(]\{}$" echo "$var" # '(]\{}$" Doesn't make a difference. IFS='\' echo $var # '(] {}$" \ converted to space. Why? echo "$var" # '(]\{}$" 
  • Что означает «</ dev / null»?
  • Что такое? = В bash?
  • ^ Символы C в начале редактирования команды bash bash
  • Забудьте хэшированное исполняемое местоположение в интерактивной оболочке bash
  • Какая конфигурация может вставлять строки между командами?
  • Полностью перезапустите Bash
  • Горячие клавиши bash
  • Поместите две команды после ||
  • в окне «Новый терминал»: количество от 1 до 10
  • Что является хорошим примером сценария bash для изучения, чтобы изучить хорошие правила кодирования?
  • Force bash для вывода вывода в пробелы
  • Interesting Posts

    Обновление /boot/grub/menu.lst на OpenSuSe 11.3

    Печать строки n-1 (и n), если строка n выполняет условие

    Как я могу исправить / etc / network / interfaces Debian?

    Нужно ли двум MDA нуждаться в собственных MTA?

    Переменная среды для черного списка общей библиотеки?

    Каково значение «tab», например, в «crontab» или «initab»?

    unix – случайно переместил все под root в / old – Solaris 10

    Неправильный пароль при использовании SSH с открытым / закрытым ключом

    Количество ядер процессора в зависимости от частоты ядер в Qemu / Virtualbox

    Может ли BTRFS восстановить / продолжить работу после отказа диска в «одном» режиме?

    Отобразить диалоговое окно из среды pam_exec при входе в систему?

    JDK 1.4.2 – где я могу скачать источник?

    Замораживание после / dev / sdaX: clean

    Почему я получаю это сообщение от xauth: «тайм-аут в файле блокировки /home/<user>/.Xauthority»?

    сортировать буквы в одном слове – использовать его для поиска перестановок (или анаграмм)

    Linux и Unix - лучшая ОС в мире.