Aplique sinalizadores de expansão de parâmetro a string ou literal de array em zsh

4

Às vezes, gostaria de aplicar sinalizadores de expansão de parâmetro a uma string ou literal de matriz em zsh. Como um caso de uso de exemplo, digamos que eu queira dividir algumas linhas delimitadas por vírgula $arglist em vírgulas, mas acrescente algo à frente. Seria bom poder fazer isso:

${(s/,/)arg1,arg2,$restofarglist}

É claro que existem outras maneiras de resolver esse problema específico, e sei que sempre posso atribuir a um parâmetro primeiro e depois aplicar os sinalizadores. Mas a questão é: posso aplicar sinalizadores diretamente a um literal de alguma forma?

    
por Sean Mackesey 06.10.2014 / 18:50

1 resposta

6

Acho que você está procurando a substituição do parâmetro :- :

$ restofarglist='abc,def'
$ echo ${(s/,/)${:-arg1,arg2,$restofarglist}}
arg1 arg2 abc def

De 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.

Na verdade, você pode tornar este exemplo um pouco mais curto:

$ echo ${${:-arg1,arg2,$restofarglist}//,/ }
arg1 arg2 abc def
    
por 07.10.2014 / 07:39

Tags