我想将给脚本的命令行参数传递给另一个命令,但我还想在前面添加一些额外的参数。我怎么能用bash做到这一点?
这会将所有参数发送到命令:
command $@
但我想要更像的东西:
command [argument1, argument2, $@]
你怎么能在bash中做这样的事情?
答案 0 :(得分:14)
@ ThatOtherGuy的回答是正确的。
如果您希望在位置参数中“取消”一些参数,请执行以下操作:
set -- arg1 arg2 "$@"
cmd "$@"
答案 1 :(得分:5)
如果您有grep foo
并且想要在-f
之前添加foo
,则可以使用grep -f foo
。同样适用于此:
cmd argument1 argument2 "$@"
答案 2 :(得分:0)
如果您想要更通用的方法(推荐),请使用:
#!/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