Botond
Botond

Reputation: 2802

Bash function argument from variable

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?

Upvotes: 0

Views: 603

Answers (2)

Ivan
Ivan

Reputation: 7253

My question is why is this happening

This is how it works.

and how to pass the entire $FLAG argument to the function

Like this:

func1 "$FLAGS"
func2 "$FLAGS"

Or change your functions like this:

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

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

Upvotes: 2

Dave Costa
Dave Costa

Reputation: 48111

Change

func1 $FLAGS

to

func1 "$FLAGS"

Without the quotes, '-p' is $1 and '-i' is $2

Upvotes: 2

Related Questions