
Иногда мне хотелось бы применить флаги расширения параметров к строке или массиву литералов в zsh. В качестве примера использования, скажем, я хочу разделить некоторую строку, разделенную запятыми, $arglist
на запятые, но добавить что-то в начало. Было бы неплохо иметь возможность сделать это:
${(s/,/)arg1,arg2,$restofarglist}
Конечно, есть и другие способы решения этой конкретной проблемы, и я знаю, что всегда могу сначала присвоить параметру, а затем применить флаги. Но вопрос в том: могу ли я как-то применить флаги непосредственно к литералу?
решение1
Я думаю, вы ищете :-
замену параметров:
$ restofarglist='abc,def'
$ echo ${(s/,/)${:-arg1,arg2,$restofarglist}}
arg1 arg2 abc def
Из man zsh:
${name:-word}
If name is set, or in the second form is non-null, then substitute its value;
otherwise substitute word. In the second form name may be omitted, in which
case word is always substituted.
На самом деле этот пример можно сделать немного короче:
$ echo ${${:-arg1,arg2,$restofarglist}//,/ }
arg1 arg2 abc def