Подтвердить что ты не робот

Вложенные кавычки в bash

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

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

Ожидаемый результат: привет мир

Ouput: grep: world ": нет такого файла или каталога

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

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

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

Как это достичь?

4b9b3361

Ответ 1

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

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

Ответ 2

Немного непонятно, что означает "что-то подобное", но самый простой способ добиться того, что кажется здесь, - простая функция:

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

Ответ 3

Побег пробелов

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

Ответ 4

Двойные кавычки вокруг $() не нужны:

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

# Output:
hello world