【发布时间】:2014-03-14 11:24:03
【问题描述】:
我想将提供给脚本的命令行参数传递给另一个命令,但我还想先在前面添加一些额外的参数。我怎么能用 bash 做到这一点?
这会将所有参数发送到命令:
command $@
但我想要更多类似的东西:
command [argument1, argument2, $@]
你怎么能在 bash 中做这样的事情?
【问题讨论】:
标签: linux bash command-line-arguments
我想将提供给脚本的命令行参数传递给另一个命令,但我还想先在前面添加一些额外的参数。我怎么能用 bash 做到这一点?
这会将所有参数发送到命令:
command $@
但我想要更多类似的东西:
command [argument1, argument2, $@]
你怎么能在 bash 中做这样的事情?
【问题讨论】:
标签: linux bash command-line-arguments
@ThatOtherGuy 的回答是正确的。
如果您希望将几个参数“取消移位”到位置参数中,请执行以下操作:
set -- arg1 arg2 "$@"
cmd "$@"
【讨论】:
如果你有grep foo并且你想在foo之前添加-f,你可以使用grep -f foo。同样的事情也适用于这里:
cmd argument1 argument2 "$@"
【讨论】:
$@ 的行为与$* 类似,并且受分词和通配符的影响。最常见的表现是你不能对包含空格的文件名做任何事情。
cmd "x y $@",以便稍后我可以在cmd 中操作“$1”
cmd "x y $*"
如果您想要更通用的方法来执行此操作(推荐),请使用:
#!/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
【讨论】: