在同一行中定义和使用别名似乎不起作用:
$ alias x=ls; x
x: command not found
我怎样才能在第二次调用中“退出”x
以便它被识别为别名?
答案1
你不能(以通常的方式)。参见Bash 手册中有关别名的部分(重点是我的):
有关别名定义和使用的规则有些令人困惑。Bash 总是读取至少一整行输入以及组成复合命令的所有行,然后才执行该行或复合命令上的任何命令。别名是在读取命令时展开的,而不是在执行命令时展开的。因此,与另一个命令出现在同一行上的别名定义只有在读取下一行输入时才会生效。该行上别名定义后面的命令不受新别名的影响。[...]为了安全起见,请始终将别名定义放在单独的行上,并且不要在复合命令中使用别名。
您可以通过强制重新解析来解决此问题eval
:
$ alias x=date; eval x
Fri Nov 12 18:20:54 JST 2021