我的问题不是简单地用空格传递参数(我知道如何实现),请考虑更复杂的情况:
function build() {
make CC="$1" CFLAGS="$2" $* # $* is not correct here!
}
build gcc "XXX" VAR1="a b" VAR2="c=A d=B" LDFLAGS="-L/opt/lib -lm"
等同于
make CC=gcc CFLAGS=XXX VAR1="a b" VAR2="c=A d=B" LDFLAGS="-L/opt/lib -lm"
我想实现这一功能,以便在Shell中工作(请使用便携式解决方案,没有bashisms等)。有什么建议,建议吗?
更好的解决方案有两个要素:
shift
使用定义函数shift
,如下所示:
function build {
local cc="$1"
local cflags="$2"
shift 2
make CC="$cc" CFLAGS="$cflags" "$@"
}
我们将前两个参数保存到局部变量中,然后将整个参数数组移动两个;另外,引用“ $ @”扩展名。
然后,使用额外的引号进行调用,如下所示:
build gcc "XXX" 'VAR1="a b" VAR2="c=A d=B"' 'LDFLAGS="-L/opt/lib -lm"'
单引号保护了函数中多余的参数;否则,外壳程序将删除引号,并且VAR2=c=A d=B
在函数中将您留下(未引号)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句