如何将命令行参数传递给别名?下面是一个例子:

alias mkcd='mkdir $1; cd $1;'

但是在本例中,$xx是在创建别名时而不是在运行时被转换的。然而,我已经创建了一个使用shell函数的解决方案(在谷歌了一下之后),如下所示:

function mkcd(){
  mkdir $1
  cd $1
}

只是想知道是否有一种方法使别名接受CL参数。 BTW -我使用'bash'作为我的默认shell。


当前回答

这是在ksh工作:

$ alias -x mkcd="mkdir \$dirname; cd \$dirname;"
$ alias mkcd
mkcd='mkdir $dirname; cd $dirname;'
$ dirname=aaa 
$ pwd
/tmp   
$ mkcd
$ pwd
/tmp/aaa

“-x”选项使别名“exported”-别名在子shell中可见。

并且要注意,在脚本中定义的别名在脚本中是不可见的(因为别名是在加载脚本时展开的,而不是在解释一行时展开的)。这可以通过在同一个shell中执行另一个脚本文件来解决(使用dot)。

其他回答

实际上,您不能随心所欲地使用Bash别名,因为别名是静态的。相反,使用您创建的函数。

更多信息请查看这里:http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/。(是的,我知道这是mactips.org,但这是关于Bash的,所以不用担心。)

你可能还会发现这个命令很有用:

Mkdir dirname && CD $_

其中dirname是要创建的目录名

下面是一个使用Python的简单示例函数。你可以插入~/.bashrc。

你需要在第一个左花括号之后有一个空格。

python命令需要用双引号来获得变量替换。别忘了结尾的分号。

count(){ python -c "for num in xrange($1):print num";}

示例运行:

$ count 6
0
1
2
3
4
5
$

这是在ksh工作:

$ alias -x mkcd="mkdir \$dirname; cd \$dirname;"
$ alias mkcd
mkcd='mkdir $dirname; cd $dirname;'
$ dirname=aaa 
$ pwd
/tmp   
$ mkcd
$ pwd
/tmp/aaa

“-x”选项使别名“exported”-别名在子shell中可见。

并且要注意,在脚本中定义的别名在脚本中是不可见的(因为别名是在加载脚本时展开的,而不是在解释一行时展开的)。这可以通过在同一个shell中执行另一个脚本文件来解决(使用dot)。

你找到了方法:创建一个函数而不是一个别名。C shell有一种对别名执行参数的机制,但bash和Korn shell没有,因为函数机制更灵活,并提供相同的功能。