On Thu, Nov 16, 2006 at 03:38:26PM +0300, Dmitry V. Levin wrote: > > Кстати, этот раздел чего-то недоговаривает. "Each variable assignment > > is checked for unquoted tilde-prefixes immediately following a : or the > > first =." > > > > $ sh -c 'echo config=~ apt-config=~' > > config=~ apt-config=~ > > Сравни: > sh -c 'echo a=~' > и > sh -c 'a=~; echo $a' > > > $ bash -c 'echo config=~ apt-config=~' > > config=/home/at apt-config=~ > > Заметь, никакого присваивания ни в одном из случаев нет. > Есть конструкция, похожая на присваивание, причём поскольку apt-config не > может быть переменной, apt-config=~ заведомо не может быть присваиванием. Это понятно. Где-то в недрах zshguide даже объясняется, с чем это связано. В некоторых командах, типа export и local, удобно, чтобы tilde expansion тоже работало. $ sh -c 'export a=~;echo $a' /home/at $ Но ведь export является командой, а a=~ -- аргументом этой команды. Поэтому в ksh был выбран компромиссный вариант, при котором tilde expansion случается всегда, если тильда идет после знака равно. $ ksh -c 'echo a=~' a=/home/at $ ksh -c 'echo -a=~' -a=/home/at $ В bash, по-видимому, выбрали несколько другой компромисс: тильда раскрывается только тогда, когда выражение ("слово") "совсем похоже" на присваивание (то есть начинается с "идентификатора").