在 linux/bash 中添加到命令行参数
Posted
技术标签:
【中文标题】在 linux/bash 中添加到命令行参数【英文标题】:Prepend to command line arguments in linux/bash 【发布时间】:2014-03-14 11:24:03 【问题描述】:我想将提供给脚本的命令行参数传递给另一个命令,但我还想先在前面添加一些额外的参数。我怎么能用 bash 做到这一点?
这会将所有参数发送到命令:
command $@
但我想要更多类似的东西:
command [argument1, argument2, $@]
你怎么能在 bash 中做这样的事情?
【问题讨论】:
【参考方案1】:@ThatOtherGuy 的回答是正确的。
如果您希望将几个参数“取消移位”到位置参数中,请执行以下操作:
set -- arg1 arg2 "$@"
cmd "$@"
【讨论】:
【参考方案2】:如果你有grep foo
并且你想在foo
之前添加-f
,你可以使用grep -f foo
。同样的事情也适用于这里:
cmd argument1 argument2 "$@"
【讨论】:
@bt,请注意此处使用引号。这非常重要:它完全按照接收到的方式传递参数。 谢谢!完美运行!在什么情况下不能在 $@ 周围加上引号把你弄乱?$@
的行为与$*
类似,并且受分词和通配符的影响。最常见的表现是你不能对包含空格的文件名做任何事情。
嗯,正在寻找一种方法来代替cmd "x y $@"
,以便稍后我可以在cmd
中操作“$1”
@AlexanderMills 这是一个非常糟糕的设计决定,我强烈建议您重新考虑。该脚本将很脆弱,无法处理带有空格的参数。如果你坚持,你可以使用cmd "x y $*"
【参考方案3】:
如果您想要更通用的方法来执行此操作(推荐),请使用:
#!/usr/bin/env bash
function xyz
echo "$args[@]" # arguments will printed out
function abc
local args=()
args+=(argument1)
args+=(argument2)
args+=("$@")
xyz "$args[@]"
为了测试,源码上面的代码
source script.sh && abc
【讨论】:
以上是关于在 linux/bash 中添加到命令行参数的主要内容,如果未能解决你的问题,请参考以下文章