我想将所有脚本参数传递给foo
函数,如果第一个参数是something
,则将所有其余参数传递给bar
函数。
我实现了这个:
foo() {
if [ "$1" = 'something' ]; then
args=("$@")
unset args[0]
bar $args
fi
}
foo $@
这可以简化这个吗?
答案 0 :(得分:3)
是的,请使用shift
foo(){
if [[ $1 == 'something' ]]; then
shift
bar "$@"
fi
}
foo "$@"
答案 1 :(得分:3)
如果args
中的任何其他内容都不需要foo
数组,则可以完全避免使用SiegeX的答案。如果由于其他原因需要args
,那么您所做的是最简单的方法。
您的代码中存在错误。当您致电bar
时,您只会传递args
的第一个元素。要传递所有元素,您需要这样做:
bar "${args[@]}"