smaharbA писал(а): ↑27.08.2012 23:57
x=1;x="x";z='x'; [[ $z -eq 1 ]] && echo 123;
яйца надо обрывать за такую предусмотрительность
Нет ничего удивительного, что у вас не получается когда вы всё делаете неправильно. Обычные переменные — это просто строки. Никакого мотива подставлять вместо строки
x строку
1 у bash нет, зато есть мотив ничего не подставлять (стандарт). Но можно сделать так, чтобы мотив появился:
(Created by format.vim)
typeset -i x
x=1
x=x
z=x
[[ z -eq 1 ]] && echo True
выведет
True.
Вообще, на каком основании вы ожидали чего‐то ещё? Когда вы делаете
x="x" новым значением
x становится
x. Откуда bash возьмёт 1 вместо
x? В моём примере просто 1 подставляется вместо
x на этапе присваивания, сама переменная никогда не получает значения
x. В вашем bash пытается это сделать на этапе проверки, что, естественно не работает — x уже ссылается на саму себя.