如何在bash别名中包含参数?

And*_*rov 21 bash alias mkdir

试图创建:

alias mcd="mkdir $1; cd $1"
Run Code Online (Sandbox Code Playgroud)

获得:

$ mcd foo
usage: mkdir [-pv] [-m mode] directory ...
-bash: foo: command not found
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

jus*_*ody 32

别名只能用一些任意文本替换命令的第一个单词.它不能使用参数.

您可以改为使用shell函数:

mcd()
{
  test -e "$1" || mkdir "$1"
  cd "$1"
}
Run Code Online (Sandbox Code Playgroud)

  • 它不能用作shell脚本,因为脚本将在子shell中运行.为了使cd具有预期的效果,它必须在调用者的shell中运行,而不是子shell. (5认同)