Вложенные цитаты в bash - PullRequest
13 голосов
/ 07 июля 2011

Я хочу что-то подобное в bash:

 alias foo='bar="$(echo hello world | grep \"hello world\")"; echo $bar;'; foo

Ожидаемый вывод: hello world

Выход: grep: world ": нет такого файла или каталога

  • Внешние кавычки должны быть одинарными, с двойными кавычками $ bar будет пустым.

  • Следующие кавычки должны быть двойными, с одинарными кавычками $ () не будет расширяться.

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

Как мне этого добиться?

Ответы [ 4 ]

34 голосов
/ 07 июля 2011

Материал внутри $() представляет собой подоболочку, поэтому вам разрешено помещать неэкранированные двойные кавычки внутри

alias foo='bar="$(echo testing hello world | grep "hello world")"; echo "$bar"'
5 голосов
/ 07 июля 2011

Немного неясно, что означает «что-то вроде этого», но самый простой способ достичь того, что, как представляется, здесь имеет смысл, - это простая функция:

foo() {
    echo 'hello world' | grep 'hello world'
}
foo
  • Нет необходимостиприсваивание промежуточной переменной (оно все равно будет потеряно).
  • Функции обычно предпочтительнее псевдонимов из-за большей гибкости (обработки параметров) и читаемости (несколько строк; меньше экранирования).
  • Всегда использовать простейшее решение, которое могло бы сработать .
1 голос
/ 07 июля 2011

Побег пробел

alias foo='bar="$(echo hello world | grep hello\ world)"; echo $bar;'
0 голосов
/ 07 июля 2011

Двойные кавычки вокруг $() не обязательны:

alias foo='bar=$(echo hello world | grep "hello world"); echo $bar;'
foo

# Output:
hello world
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...