如何将命令行参数传递给别名?这是一个示例:
别名mkcd ='mkdir $ 1; cd $ 1;'
但是在这种情况下,$ xx在别名创建时而不是在运行时转换。但是,我已经使用shell函数(在进行了少许搜索之后)创建了一种变通方法,如下所示:
函数mkcd(){ mkdir $ 1 cd $ 1 }
只是想知道是否有一种方法可以使别名接受CL参数。
顺便说一句-我使用“ bash”作为默认外壳。
mkdir mydirectoryname && cd $_
如何将命令行参数传递给别名?这是一个示例:
别名mkcd ='mkdir $ 1; cd $ 1;'
但是在这种情况下,$ xx在别名创建时而不是在运行时转换。但是,我已经使用shell函数(在进行了少许搜索之后)创建了一种变通方法,如下所示:
函数mkcd(){ mkdir $ 1 cd $ 1 }
只是想知道是否有一种方法可以使别名接受CL参数。
顺便说一句-我使用“ bash”作为默认外壳。
mkdir mydirectoryname && cd $_
Answers:
您找到了方法:创建函数而不是别名。C外壳具有用于对别名进行参数处理的机制,而bash和Korn外壳则没有,因为函数机制更灵活并且提供相同的功能。
.bashrc
文件中创建别名时不需要功能。例如,#创建一个别名,该别名将由用户别名serve =“ python -m SimpleHTTPServer $ 1”占用端口号。在.bashrc文件中进行更改后,请确保输入以下命令。〜$ source .bashrc您应该可以像这样使用它~~
为了重申在其他Bash中发布的内容,在Bash中进行以下工作:
alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah'
运行以下命令:
blah one two
给出以下输出:
First: one
Second: two
Bash
替换$1
并$2
带有传递给函数的参数。单引号告诉Bash不要这样做。
function blah(){ echo "First: $1"; echo "Second: $2"; }
您不能在ksh中使用,但可以在csh中使用。
alias mkcd 'mkdir \!^; cd \!^1'
在ksh中,函数是必经之路。但是,如果您真的想使用别名:
alias mkcd='_(){ mkdir $1; cd $1; }; _'
csh
现代人通常不应该使用它。创建函数然后执行该函数的别名相对比较流行,但据我所知,它比适当的函数没有任何好处。(无论如何,函数应该正确地引用其参数。)
您可能还会发现此命令有用:
mkdir dirname && cd $_
其中dirname是您要创建的目录的名称
$_
是最后一个命令unix.stackexchange.com/a/271693/169772
我发现函数不能写在~/.cshrc
文件中。这里是带参数的别名
例如,传递给“ find”命令的参数
alias fl "find . -name '\!:1'"
Ex: >fl abc
其中abc是作为!:1传递的参数
!:1
含义。我必须向下滚动才能看到这里是论点。一个好的答案不会留下更多的问题,即使它不是针对OPs shell类型的。
实际上,由于Bash别名是静态的,因此您无法执行所需的操作。而是使用您创建的函数。
在此处查找更多信息:http : //www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/。(是的,我知道它是mactips.org,但这是关于Bash的,所以不用担心。)
这在ksh中有效:
$ alias -x mkcd="mkdir \$dirname; cd \$dirname;"
$ alias mkcd
mkcd='mkdir $dirname; cd $dirname;'
$ dirname=aaa
$ pwd
/tmp
$ mkcd
$ pwd
/tmp/aaa
“ -x”选项使别名“导出”-别名在子外壳中可见。
并且要注意以下事实:脚本中定义的别名在该脚本中不可见(因为别名是在加载脚本时扩展的,而不是在解释行时扩展的)。这可以通过在同一shell中执行另一个脚本文件(使用点)来解决。
我认为,如果您使用bash,则可以使用shell函数完成此任务:http : //www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/