Consider the following code, where I defined two functions, func1 and 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"
The aim is to pass an argument to them, in this case FLAGS="-p -i". I would expect that all the four calls above are equivalent. However, this is the output I'm getting:
func1 -p
func2 -p
func1 -p
func1 -p -i
func2 -p -i
func1 -p
This tells me that, whenever the argument is saved into a variable, it gets parsed and only the pre-white space part is passed to the function. My question is why is this happening and how to pass the entire $FLAG argument to the function, regardless of whether it contains spaces or not?