2

Давайте предположим, что у меня есть массив

> words=(foo bar baz)

Теперь я могу присоединиться к элементам

> echo ${(j., .)words}
foo, bar, baz

И я могу добавить строку к элементам:

> echo ${^words}yeah
fooyeah baryeah bazyeah

С помощью следующего я могу добавлять и присоединять элементы:

> wordsyeah=(${^words}yeah)
> echo ${(j., .)wordsyeah}
fooyeah, baryeah, bazyeah

Можно ли сделать вывод "fooyeah, baryeah, bazyeah" в одном выражении, т.е. без использования дополнительных переменных?

Бонус: я могу напечатать это без использования каких-либо переменных вообще?

Насколько я могу судить, это сводится к запуску расширения параметров в строках, но я не смог выяснить, как (или если) это возможно.

1 ответ1

2

Ответ

> print ${(j., .)${:-${^words}yeah}}
fooyeah, baryeah, bazyeah

или же

> print ${(j., .)${:-{foo,bar,baz}yeah}}
fooyeah, baryeah, bazyeah

без использования переменных вообще

Критическая часть - это ${name:-word} . Это объясняется в руководстве .

${name-word}
${name:-word}

Если имя установлено или во второй форме не равно NULL, подставьте его значение; в противном случае заменить слово. Во второй форме имя может быть опущено, в этом случае слово всегда подставляется.

Спасибо phy1729 из #zsh за указание на это мне :)

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