
A veces me gustaría aplicar indicadores de expansión de parámetros a una cadena o matriz literal en zsh. Como caso de uso de ejemplo, digamos que quiero dividir una cadena delimitada por comas $arglist
entre comas, pero anteponer algo al frente. Sería bueno poder hacer esto:
${(s/,/)arg1,arg2,$restofarglist}
Por supuesto, hay otras formas de resolver este problema en particular, y sé que siempre puedo asignar un parámetro primero y luego aplicar las banderas. Pero la pregunta es: ¿puedo aplicar indicadores directamente a un literal de alguna manera?
Respuesta1
Creo que estás buscando :-
una sustitución de parámetros:
$ restofarglist='abc,def'
$ echo ${(s/,/)${:-arg1,arg2,$restofarglist}}
arg1 arg2 abc def
Del hombre 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.
De hecho, puedes hacer este ejemplo un poco más corto:
$ echo ${${:-arg1,arg2,$restofarglist}//,/ }
arg1 arg2 abc def