"$@"
访问参数。当我使用别名时等效吗?#1 楼
别名就像命令一样,它们的所有参数都作为参数传递给别名的程序。例如,如果要将ls
别名为ls -la
,则在命令行上键入ls foo bar
会真正执行ls -la foo bar
。如果您想对参数的解释方式进行实际控制,则可以编写像这样的功能:
my_program_wrapper() {
local first_arg="" \
second_arg=""
shift 2 # get rid of the first two arguments
# ...
/path/to/my_program "$@"
}
#2 楼
别名解决方案如果您真的反对使用函数本身,则可以使用:
$ alias wrap_args='f(){ echo before "$@" after; unset -f f; }; f'
$ wrap_args x y z
before x y z after
如果您只需要第一个参数。
说明
这将创建一个临时函数
$@
,该函数将传递参数。仅传递别名参数在最后。请注意,
在别名的末尾被调用。 在执行别名时,
f
会删除函数定义,因此以后不会挂起。评论
哼? wrap_args x y z给我:bash:意外标记'('附近的语法错误
–椭圆视图
17年12月15日在19:45
我有别名。一旦我别名是否正常。旧名称冲突的东西。
–椭圆视图
17年12月19日在3:51
命令类型f :)
–汤姆·黑尔
18年6月25日在16:56
大!那是最懒的变体!
– Sergius
19年4月10日在17:13
这对于特殊情况非常有用。考虑一个代码块,您希望在此代码上避免大惊小怪:echo echo ='f(){echo“ $ @”&> / dev / null;未设置-f f; }; F'。例如,将该行添加到引导脚本以强制进入安静模式。
–Beejor
19年5月2日在20:03
#3 楼
除了当前的答案外,要了解别名的工作原理,重要的一点是,在别名命令之后键入的所有参数都将在最后使用。因此,无法对两个命令(是否通过管道)使用别名,第一个命令应从别名中解释参数。为了清楚起见,下面是一个无法正常工作的示例:在当前目录中执行并执行grep-因此,使用lsswp / tmp /
等效于
ls -l
而不是ls -l | grep swp /tmp/
。出于各种目的,应该在中间的某个位置使用参数,则需要使用
ls -l /tmp/ | grep swp
而不是function
。#4 楼
实际上,您无需执行任何操作。别名会自动执行此操作。例如:$ alias less="less -eirqM"
$ less foo.txt
您将看到foo.txt的首页,而
less
将在EOF(-e)退出,搜索将不区分大小写(-i)等评论
您能否看一下我的问题-没有一种解决方案对我有效,因此我无法开始赏金。
– JJD
16-2-9在23:40
@JJD回答您问题的人是正确的:在这种情况下,您需要一个函数,而不是别名。由于该问题的公认答案本质上是相同的,因此您的问题已被正确解决。
–沃伦·杨(Warren Young)
16年2月9日在23:44
#5 楼
我在回答csh:是的,您可以在别名中使用参数,并且-与上面所说的不同-您可以在别名的定义中的任何地方引用它们-不仅最后是
tar-gz的示例:
$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"
,其中
!:1
和!:2
是在以下情况下将提供的参数调用您的别名。使用示例:
$ ls
clrcf.dat user_comment_2016.06.03_12:51:50.txt user_comment_2016.06.03_12:54:48.txt
TEST-wADM.tec user_comment_2016.06.03_12:52:04.txt user_comment_2016.06.03_12:55:13.txt
$ tgz user* out
a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K
$ ls out*
out.tar.gz
这实际上意味着您使用了在tar的任意位置插入的两个参数命令,将其全部命名为
tgz
评论
opengroup.org/onlinepubs/009695399/utilities/…sh中的函数已定义my_program_wrapper(){...; }。 Bash可以处理关键字功能,但是为什么不随身携带更便携的功能呢?
–短暂
2010年11月5日,下午1:51
@ephemient非常正确。我的意思是除了每个人都使用GNU Bash而不是准系统POSIX shell的事实。
–amphetamachine
2010-11-5 12:53