zsh substituições: (P) e :: = operadores interação

0

Alguém pode me explicar o resultado do seguinte script em zsh:

#!/bin/zsh
var1=var2
var2=first
var3=second
echo var1="$var1"
echo var2="$var2"
echo var3="$var3"
echo '${${(P)var1::=var3}}'="${${(P)var1::=var3}}"
echo var1="$var1"
echo var2="$var2"
echo var3="$var3"
echo ------------
var1=var2
var2=first
var3=second
echo var1="$var1"
echo var2="$var2"
echo var3="$var3"
echo '${(P)var1::=var3}'="${(P)var1::=var3}"
echo var1="$var1"
echo var2="$var2"
echo var3="$var3"

Resultado:

var1=var2
var2=first
var3=second
${${(P)var1::=var3}}=second
var1=var2
var2=var3
var3=second
------------
var1=var2
var2=first
var3=second
${(P)var1::=var3}=var3
var1=var2
var2=var3
var3=second

Tanto quanto eu entendo o manual do zsh (14.3.2 Regras), a execução da primeira seção (acima de ------) deve ser a seguinte:

  1. Ponto 7 (aplique o operador :: =) (defina var1 como var3)
  2. Ponto 25 (aplique o operador (P)) (dereference var1, get var3)
  3. Emita o valor de var3: 'second'

Estes passos estão de acordo com a seguinte linha no resultado:

${${(P)var1::=var3}}=second

Mas por que no resultado aparecem as seguintes linhas:

var1=var2
var2=var3

em vez do esperado:

var1=var3
var2=first

A execução da segunda seção (abaixo ----) deve ser (de acordo com o manual):

  1. Ponto 4 (aplique o operador (P)) (dereference var1, get var2)
  2. Ponto 7 (aplique o operador :: =) (defina var2 como var3)
  3. Saída do valor de var2: 'var3'

Os resultados desta seção correspondem perfeitamente à explicação acima, portanto, o problema é apenas com a primeira seção.

    
por Mateusz Grotek 04.06.2018 / 16:19

1 resposta

0

O (P) se aplica antes da atribuição, por isso é:

  1. ${(P)var1::=var3} - > %código%
  2. - > %código%
  3. - > %código%

com ${var2::=var3} tendo sido atribuído a ${var3} .

Para forçar o outro pedido, use second

Observe a nota no manual sobre essas regras:

Note that the Zsh Development Group accepts no responsibility for any brain damage which may occur during the reading of the following rules.

    
por 04.06.2018 / 16:29

Tags