Ответ 1
Содержимое внутри $()
представляет собой подоболочку, поэтому вам разрешено помещать скрытые двойные кавычки внутри
alias foo='bar="$(echo testing hello world | grep "hello world")"; echo "$bar"'
Я хочу что-то подобное в bash:
alias foo='bar="$(echo hello world | grep \"hello world\")"; echo $bar;'; foo
Ожидаемый результат: привет мир
Ouput: grep: world ": нет такого файла или каталога
Внешние кавычки должны быть одинарными кавычками, с двойными кавычками $bar будет пустым.
Следующие кавычки должны быть двойными кавычками, при этом одиночные кавычки $() не будут расширяться.
Внутренние кавычки могут быть оба типа кавычек, но одинарные кавычки не позволяют одинарные кавычки внутри них.
Как это достичь?
Содержимое внутри $()
представляет собой подоболочку, поэтому вам разрешено помещать скрытые двойные кавычки внутри
alias foo='bar="$(echo testing hello world | grep "hello world")"; echo "$bar"'
Немного непонятно, что означает "что-то подобное", но самый простой способ добиться того, что кажется здесь, - простая функция:
foo() {
echo 'hello world' | grep 'hello world'
}
foo
Побег пробелов
alias foo='bar="$(echo hello world | grep hello\ world)"; echo $bar;'
Двойные кавычки вокруг $()
не нужны:
alias foo='bar=$(echo hello world | grep "hello world"); echo $bar;'
foo
# Output:
hello world