bash:无法在同一行中设置和使用别名

Mot*_*tys 6 bash zsh busybox dash-shell

我希望第二行foo代替command not found:

$ alias foo="echo bac" ; foo;
-bash: foo: command not found
$ foo
bac
$
Run Code Online (Sandbox Code Playgroud)

第二行为什么不说foo?使用以下shell进行测试,行为相同:

  • bash 3.2.5
  • zsh 5.0.8
  • 破折号0.5.9
  • busybox 1.25.0

Tom*_*ech 7

您正在看到的行为在Bash参考手册(强调我的)中有所描述:

关于别名的定义和使用的规则有些令人困惑.在执行该行上的任何命令之前,Bash始终会读取至少一个完整的输入行.读取命令时会扩展别名,而不会在执行时扩展别名.因此,在读取下一行输入之前,与另一个命令出现在同一行上的别名定义不会生效.该行上别名定义后面的命令不受新别名的影响.

据推测,其他炮弹也以这种方式行事.