Почему расширение переменной bash сохраняет кавычки?

> echo "hi" hi > VAR='echo "hi"' > $VAR "hi" 

Почему вывод вышеуказанных команд отличается?

Аналогичная ситуация имеет место с одинарными кавычками:

 > VAR="echo 'hi'" > $VAR > 'hi' 

3 Solutions collect form web for “Почему расширение переменной bash сохраняет кавычки?”

Дополнительная пара котировок будет потребляться только дополнительным этапом оценки. Например, принудительно с помощью eval :

 bash-4.2$ VAR='echo "hi"' bash-4.2$ $VAR "hi" bash-4.2$ eval $VAR hi 

Но, как правило, это плохая идея поместить команды с параметрами в одну строку. Вместо этого используйте массив:

 bash-4.2$ VAR=(echo "hi") bash-4.2$ "${VAR[@]}" hi 

Удаление ссылок происходит только на исходных входных словах, а не на результате разложений. Цитаты, которые являются частью расширенных переменных, не затронуты.

Если вы немного отступите, вы увидите, почему переменная подстановки абсолютно должна сохранять кавычки.

Точка кавычек в оболочке Unix / Linux / BSD должна содержать фрагменты строки, которые в противном случае обрабатывались бы как несколько строк. Поскольку по умолчанию оболочка использует пробел в качестве разделителя токенов, строка с пробелами (например, «один два три»), если она не была процитирована или экранирована каким-либо образом, получит синтаксический анализ как 3 строки: «один», «два» и «три».

Если программист хочет строку со значением некоторой переменной, интерполированной:

 VAR=two STRING="one $VAR three" 

оболочка должна абсолютно не удалять кавычки: строка, содержащая пробелы, будет обрабатываться как 3 меньшие строки.

  • Плохая замена внутри подошвы xargs?
  • Сценарий Bash не конвертирует переменные
  • 7z получение события не найдена ошибка в командной строке
  • Параметры функции Bash - Пробелы в имени файла
  • Есть ли причина, чтобы указать статус выхода $? переменная?
  • Как назначить имена файлов пробелу другой переменной без потери разделителя
  • Почему эти вложенные параметры в сценарии оболочки POSIX разделены словом?
  • Как grep для нескольких шаблонов?
  • Заменить значение в одинарных кавычках в строке, содержащей определенное слово, используя команду sed
  • Двойные кавычки в bash
  • Как процитировать строку, содержащую знак доллара $ и одинарную цитату '?
  • Linux и Unix - лучшая ОС в мире.