Может кто-нибудь объяснить мне результат следующего скрипта в 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"
Результат:
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
Насколько я понимаю руководство zsh (14.3.2 Правила), выполнение первого раздела (выше ------) должно быть следующим:
- Точка 7 (примените оператор :: =) (установите var1 в var3)
- Точка 25 (применить оператор (P)) (разыменование var1, получить var3)
- Вывести значение var3: 'second'
Эти шаги согласуются со следующимистрока в результате:
${${(P)var1::=var3}}=second
Но почему в результате появляются следующие строки:
var1=var2
var2=var3
вместо ожидаемого:
var1=var3
var2=first
Выполнениевторой раздел (ниже ----) должен быть (согласно руководству):
- Точка 4 (применить оператор (P)) (разыменование var1, получить var2)
- Точка 7 (примените оператор :: =) (установите для var2 значение var3)
- Выведите значение переменной var2: 'var3'
Результаты этого раздела соответствуют описанию abovОтлично, поэтому проблема только в первом разделе.