Замены команды по сравнению с обратной косой чертой выходят в заключенной в кавычки строке

Установщик Fedora имеет шаг, на котором можно изменить и изменить размер разделов с подобным GParted интерфейсом.

Можно принять решение иметь Fedora, переустанавливают загрузчик GRUB, перезаписывая существующий из Ubuntu. После этого GRUB будет иметь записи и для Fedora и для Ubuntu, когда Вы перезагрузите.

2
27.03.2015, 00:54
3 ответа

Я думаю, что он лучше всего понимать на выходе ECHO $ ​​(ECHO '\\') (т.е. вариант без внешних цитат), что приводит к \\ . Дело в том, что нет литеральной строки интерпретации обратной косочетания (Es), когда сущность замены команд $ (...) расширена. (Это похоже на случай, если у вас есть эвакуальные символы, хранящиеся в строках; не будет перепроверка в качестве буквальной строки.)

2
27.01.2020, 21:56

Это больше связано с цитированием,

$ echo '\'
\
$ echo '\\'
\\
$ echo "\\"
\

с одиночными цитатами, что бы ни было между цитатами, повторяется. С двойными кавычками, оболочка смотрит внутрь и делает обработку.

1
27.01.2020, 21:56

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

Команда echo '\\' печатает три символа: два обратных слеша и новую строку (в предположении, что команда echo не выполняет расширение обратного слеша). Поэтому результатом подстановки команды $(echo '\\') является двухсимвольная строка \\ (окончательная новая строка удаляется, при подстановке команды это всегда так). Так как вы использовали подстановку команды внутри двойной кавычки, никакое другое расширение не выполняется: результирующая часть слова - \\.

В echo "$(echo '\')$", подстановка команды выводит одиночный обратный слеш. Ее вкладом в аргумент echo является строка \. За следующим $ следует символ, который не может запустить имя параметра, поэтому он расширяется до самого себя. Таким образом, аргументом для эха является двухсимвольная строка \$. Двухсимвольные строки больше не расширяются, нет ничего, что могло бы вызвать интерпретацию обратного слеша как специального символа (за исключением некоторых вкусов команды echo).

Вы можете просмотреть полные правила расширения в руководствах оболочки и другой документации, с различной степенью (un)читабельности. Спецификация POSIX не так уж и плоха, как идут стандарты (слабая похвала).

P.S. Как обеспечить, чтобы строка, интерполированная в `sed` замену, ускользала от всех метачаров

2
27.01.2020, 21:56

Теги

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