3

В zsh ${$(pwd)} выводит текущий каталог. Однако, если я запускаю echo ${/path/to/somewhere} , он просто показывает пустую строку. Почему это происходит? Спасибо!

1 ответ1

1

Я полагаю, вы говорите о print ${$(pwd)} или что-то в этом роде, верно ?!

Расширение ${$(pwd)} в текущий рабочий каталог является ожидаемым поведением, хотя на первый взгляд это может показаться странным. Не дайте себя одурачить, думая, что подстановка команд $(pwd) вычисляется первой, а результат используется как имя переменной... нет, он используется как значение переменной, как объясняет man zshexpn :

${name} Подставляется значение имени параметра, если оно есть.

(...) Если вместо ${...} выше используется выражение параметра типа $(...) или подстановка команды типа name , оно сначала раскрывается, а результат используется так, как если бы это было значение name . (...) Форма с $(...) часто полезна в сочетании с флагами, описанными ниже; см. примеры ниже.

(...) Флаг f полезен для разбиения двойных кавычек подстановки построчно. Например, ${(f)"$(<file)"} подставляет содержимое файла, разделенного таким образом, что каждая строка является элементом результирующего массива.

К вашему второму примеру. Я думаю, что это шаблон замены синтаксиса:

${name/pattern/repl} Заменить самое длинное из возможных совпадений pattern в раскрытии имени параметра на строку repl. (...)

Сначала посмотрите этот пример:

$ foo=hello
$ print ${foo/hello/good/bye}
good/bye

Если вы опустите foo вы скажете zsh выполнить поиск и заменить переменную ${} , которая пуста:

$ print ${}

$

- следовательно, ${/something/foo/bar} возвращает пустую строку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .