Aplicar indicadores de expansión de parámetros a una cadena o un literal de matriz en zsh

Aplicar indicadores de expansión de parámetros a una cadena o un literal de matriz en zsh

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 $arglistentre 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

información relacionada