当前位置:  开发笔记 > 编程语言 > 正文

如何将命令行参数传递给shell别名?

如何解决《如何将命令行参数传递给shell别名?》经验,为你挑选了5个好方法。

如何将命令行参数传递给别名?这是一个示例:

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

但在这种情况下,$ xx将在别名创建时转换,而不是在运行时转换.但是,我创建了一个使用shell函数的解决方法(在googling之后),如下所示:

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

只是想知道是否有办法制作接受CL参数的别名.
顺便说一句 - 我使用'bash'作为我的默认shell.



1> Thomas Bratt..:

只是为了重申已发布的其他shell的内容,在Bash中有以下工作:

alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah'

运行以下内容:

blah one two

给出下面的输出:

First: one
Second: two


我没有看到它比`function blah(){echo"First:$ 1"更受欢迎; 回声"第二名:2美元"; }`
@mynameispaulie双引号允许`Bash`用传递给函数的参数替换`$ 1`和`$ 2`.单引号告诉Bash不要这样做.
好的解决方案 来自bash新手的一些问题:函数是否必须以下划线命名(或者根本不同)或者仅仅是为了可读性?在定义函数时尾随"; _blah"的目的是什么?为什么当使用双引号代替单引号($ 1未正确解释)时,即使在$ 1附近做一些不需要引号的东西时它也不起作用?提前感谢您的建议.我有一个有效的解决方案,但总是想了解它的工作原理.
我看到这个别名/功能组合复制/粘贴很多,但它似乎没有任何有用的用途.标准方法是使用合理的名称定义函数一次,而不是别名.
@mynameispaulie该函数可以命名为任何东西.我使用了下划线前缀,因为它是帮助防止名称冲突的常见技巧(即具有相同名称的另一个函数)
@mynameispaulie关于尾随`; _blah`:分号是完成定义函数的语句.分号后面的`_blah`是别名运行时调用的实际函数.可能有助于理解当执行别名时,定义一个函数(或者如果以前运行则重新定义),然后实际调用它.

2> Charlie Mart..:

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


@ kaizer1v,我对CentOS7.3 bash版本4.2.46的观察是你的建议不能像你想象的那样工作.因为您使用的是双引号,所以$ 1实际上被计算为空字符串,而别名实际上与alias serve ="python -m SimpleHTTPServer"相同,因此在该别名之后传递的任何内容都是在命令行上传递的.如果你试试这套-x; alias serve ="python -m SimpleHTTPServer $ 1&"你会看到错误/问题.您的参数和alias命令都作为单独的命令运行.

3> Sanjaya R..:

你不能在ksh,但你可以在csh.

alias mkcd 'mkdir \!^; cd \!^1'

在ksh中,功能是要走的路.但如果你真的想要使用别名:

alias mkcd='_(){ mkdir $1; cd $1; }; _'



4> Chris Dodd..:

引用bash手册页:

在替换文本中没有使用参数的机制.如果需要参数,则应使用shell函数(参见下面的函数).

所以看起来你已经回答了自己的问题 - 使用函数而不是别名



5> tdecs..:

您可能还会发现此命令很有用:

mkdir dirname && cd $_

其中dirname是您要创建的目录的名称


你能解释它($ _)是如何工作的吗?
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有