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

在bash中将参数传递给别名

如何解决《在bash中将参数传递给别名》经验,为你挑选了4个好方法。

是否可以执行以下操作:

我想运行以下内容:

mongodb bin/mongod

在我的bash_profile中我有

alias = "./path/to/mongodb/$1"

Paused until.. 219

别名将扩展为它所代表的字符串.别名之后的任何内容都将在其扩展后出现,而不需要或能够作为显式参数传递(例如$1).

$ alias foo='/path/to/bar'
$ foo some args

将扩大到

$ /path/to/bar some args

如果要使用显式参数,则需要使用函数

$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

将被执行,就像你已经完成

$ /path/to/bar abc 123 fixed args

要取消定义别名:

unalias foo

要取消定义函数:

unset -f foo

要查看类型和定义(对于每个已定义的别名,关键字,函数,内置或可执行文件):

type -a foo

或仅键入(对于最高优先级发生):

type -t foo

只想添加我的.bashrc mkcd()中的示例{mkdir"$ @"&& cd"$ @"; 我在哪里创建dir和cd'ing (10认同)

@ 10basetom:如果你指的是答案中的颜色,那就是语法荧光笔自动完成的. (4认同)


leed25d.. 22

通常,当我想参数传递给在猛砸别名,我用一个别名,像这样的功能,例如组合:

function __t2d {                                                                
         if [ "$1x" != 'x' ]; then                                              
            date -d "@$1"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               

以及它相当不错的信息,虽然不使用x,因为它混淆了新手,傲慢的程序员似乎喜欢做某些原因.我们本来应该在这里帮忙,不管是不是老学校,都不能真正原谅它带来的混乱. (20认同)

`[-n"$ 1"]`(以这种方式使用"x"对于任何现代shell都是过时的和不必要的) (18认同)

@ leed25d愚蠢的问题:如果你把`__t2d`写成函数,那为什么你甚至想要别名呢?为什么不命名函数`t2d`并跳过别名? (9认同)

好吧,你可以叫我老学校.原始问题涉及别名和参数.我相信你的评论对谈话毫无影响. (4认同)

好消息是告诉新手不要这样做,因为它完全没有意义.他们想要的只是一个功能.制作一个函数然后将其别名化为另一个名称实际上是完全没有意义的. (4认同)


osirisgothra.. 19

要使用别名中的参数,我使用此方法:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

它是一个包含在别名中的自毁函数,因此它几乎是两个世界中最好的,并且不会在你的定义中占用额外的一行...我讨厌,哦是的,如果你需要那个回报值,你必须在调用unset之前存储它,然后在那个自毁函数中使用"return"关键字返回值:

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

所以..

你可以,如果你需要在那里有变量

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'

当然...

alias mongodb='./path/to/mongodb/'

实际上会做同样的事情而不需要参数,但就像我说的,如果你因为某些原因想要或需要它们(例如,你需要2美元而不是1美元),你需要使用这样的包装器.如果它大于一行你可能会考虑直接写一个函数,因为随着它变得越来越大,它会变得越来越像.函数很棒,因为你获得了函数给出的所有特权(参见bash手册页中函数可以提供的好东西的完成,陷阱,绑定等).

我希望能帮助你:)



1> Paused until..:

别名将扩展为它所代表的字符串.别名之后的任何内容都将在其扩展后出现,而不需要或能够作为显式参数传递(例如$1).

$ alias foo='/path/to/bar'
$ foo some args

将扩大到

$ /path/to/bar some args

如果要使用显式参数,则需要使用函数

$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

将被执行,就像你已经完成

$ /path/to/bar abc 123 fixed args

要取消定义别名:

unalias foo

要取消定义函数:

unset -f foo

要查看类型和定义(对于每个已定义的别名,关键字,函数,内置或可执行文件):

type -a foo

或仅键入(对于最高优先级发生):

type -t foo


只想添加我的.bashrc mkcd()中的示例{mkdir"$ @"&& cd"$ @"; 我在哪里创建dir和cd'ing
@ 10basetom:如果你指的是答案中的颜色,那就是语法荧光笔自动完成的.

2> leed25d..:

通常,当我想参数传递给在猛砸别名,我用一个别名,像这样的功能,例如组合:

function __t2d {                                                                
         if [ "$1x" != 'x' ]; then                                              
            date -d "@$1"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               


以及它相当不错的信息,虽然不使用x,因为它混淆了新手,傲慢的程序员似乎喜欢做某些原因.我们本来应该在这里帮忙,不管是不是老学校,都不能真正原谅它带来的混乱.
`[-n"$ 1"]`(以这种方式使用"x"对于任何现代shell都是过时的和不必要的)
@ leed25d愚蠢的问题:如果你把`__t2d`写成函数,那为什么你甚至想要别名呢?为什么不命名函数`t2d`并跳过别名?
好吧,你可以叫我老学校.原始问题涉及别名和参数.我相信你的评论对谈话毫无影响.
好消息是告诉新手不要这样做,因为它完全没有意义.他们想要的只是一个功能.制作一个函数然后将其别名化为另一个名称实际上是完全没有意义的.

3> osirisgothra..:

要使用别名中的参数,我使用此方法:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

它是一个包含在别名中的自毁函数,因此它几乎是两个世界中最好的,并且不会在你的定义中占用额外的一行...我讨厌,哦是的,如果你需要那个回报值,你必须在调用unset之前存储它,然后在那个自毁函数中使用"return"关键字返回值:

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

所以..

你可以,如果你需要在那里有变量

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'

当然...

alias mongodb='./path/to/mongodb/'

实际上会做同样的事情而不需要参数,但就像我说的,如果你因为某些原因想要或需要它们(例如,你需要2美元而不是1美元),你需要使用这样的包装器.如果它大于一行你可能会考虑直接写一个函数,因为随着它变得越来越大,它会变得越来越像.函数很棒,因为你获得了函数给出的所有特权(参见bash手册页中函数可以提供的好东西的完成,陷阱,绑定等).

我希望能帮助你:)


〜$ alias myalias ='function __myalias(){echo"Hello $*"; unset -f __myalias; } __myalias'~ $ myalias -bash:意外标记附近的语法错误`__myalias'

4> 小智..:

这是可以避免使用功能的解决方案:

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'

测试结果

addone 200
input: 200
result:201

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有