2016-10-05 11 views
1

В Zsh, если я бегу:расширение параметра Zsh на выходе флага Команда S не работает

a=$(echo "foo, bar") 
echo ${a[(ws:, :)1]} 

я foo, как можно было бы ожидать (w вызывает индекс для обозначения слов s:, : делает , быть разделитель слов).

Однако, если я пытаюсь совместить эти:

echo ${$(echo "foo, bar")[(ws:, :)1]} 

я foo,. По какой-то причине флаг w работает правильно, но флаг s:, : полностью игнорируется.

Что я здесь делаю неправильно?

Дополнительная информация: Это просто проблема с $() внутри $ {}. Если я вложу $ {} внутри $ {}, такой проблемы нет.

$ zsh --version 
zsh 5.2 (x86_64-unknown-linux-gnu) 

ответ

0

Разделение поля выполняется до начала операции индекса, поэтому поведение, которое вы видите, я ожидаю. Вы можете получить ожидаемый результат от

echo ${"$(echo "foo, bar")"[(ws:, :)1]} 

Одно примечание в сторону: Моя первая попытка была переписать выражение с помощью {== ...} форма подстановки параметров, который должен подавлять разделение полей , т.е.

echo ${${==$(echo "foo, bar")}[(ws:, :)1]} 

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

+1

'$ {==' только отключает опцию sh_word_split для расширения. По сути, это только утверждение дефолта и вряд ли будет иметь большой эффект. – okapi

+0

Можете ли вы объяснить немного больше, что вы подразумеваете под «разделение поля» и «операция индексации», и почему ваше решение работает? Кажется, что цитирование «$ (echo» и «)» просто даст синтаксическую ошибку. – Radvendii

+0

Может быть, вы используете более старую версию Zsh? Вы можете оставить внутренние кавычки или заменить их одиночными кавычками. См. [Этот снимок экрана] (https://postimg.org/image/47xhi0zwz/). – user1934428

 Смежные вопросы

  • Нет связанных вопросов^_^