Bash函数参数来自变量



考虑以下代码,其中我定义了两个函数func1func2:

func1 () {
local FLAGS=${1}
echo "func1 $FLAGS"
}
func2 () {
local FLAGS=${1}
echo "func2 $FLAGS"
func1 $FLAGS
}
FLAGS="-p -i"
func1 $FLAGS
func2 $FLAGS
func1 "-p -i"
func2 "-p -i"

目的是传递一个参数给它们,在本例中是FLAGS="-p -i"。我希望以上四个调用都是等效的。然而,这是我得到的输出:

func1 -p
func2 -p
func1 -p
func1 -p -i
func2 -p -i
func1 -p

这告诉我,无论何时将参数保存到变量中,都会对其进行解析,并且只将前空白部分传递给函数。我的问题是为什么会发生这种情况,以及如何将整个$FLAG参数传递给函数,无论它是否包含空格?

变化

func1 $FLAGS

func1 "$FLAGS"

如果没有引号,'-p'是$1,'-i'是$2

我的问题是为什么会发生这种情况

这是它的工作原理。

以及如何将整个$FLAG参数传递给函数

:

func1 "$FLAGS"
func2 "$FLAGS"

或者像这样修改你的函数:

func1 () {
local FLAGS=${@}
echo "func1 $FLAGS"
}
func2 () {
local FLAGS=${@}
echo "func2 $FLAGS"
func1 $FLAGS
}