G'day, This working as documented.
The relevant part of the manual is, I think: "Bash always reads at least one complete line of input before executing any of the commands on that line. Aliases are expanded when a command is read, not when it is executed." If aaa is not already defined, the actual behaviour is: $ alias aaa='echo aaa'; ( alias aaa='echo bbb'; aaa ; ) -bash: aaa: command not found Which is consistent with the manual page. If aaa is already defined, then $ alias aaa='echo aaa'; ( alias aaa='echo bbb'; aaa ; ) aaa which is what you observed. Use unalias aaa and then you will get: $ alias aaa='echo aaa'; ( alias aaa='echo bbb'; aaa ; ) -bash: aaa: command not found jon. On 11/01/2009, at 23:18, Коренберг Марк <socketp...@gmail.com> wrote: > Configuration Information [Automatically generated, do not change]: > Machine: i486 > OS: linux-gnu > Compiler: gcc > Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='i486' - > DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i486-pc-linux-gnu' - > DCONF_VENDOR='pc' -DLOCALED $uname output: Linux mmarkk-desktop > 2.6.27-11-generic #1 SMP Thu Jan 8 08:38:33 UTC 2009 i686 GNU/Linux > Machine Type: i486-pc-linux-gnu > > Bash Version: 3.2 > Patch Level: 39 > Release Status: release > > Description: > See Repeat-by section. > > Repeat-By: > alias aaa='echo aaa'; ( alias aaa='echo bbb'; aaa ; ) > Will print 'aaa' instead of 'bbb' as I expect. > >