考虑以下代码,其中我定义了两个函数func1
和func2
:
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
}