I'm trying to construct a command dynamically, but I can't figure out how to deal with quoted multi-word arguments.
Too see what the shell is doing with quotes use the set -x command in the terminal or use #!/bin/bash -x in a script
Some people attempt to do things like this:
# Non-working example args="-s 'The subject' $address" mail $args < $body
This fails because of word-splitting. When $args is evaluated, it becomes four words: 'The is the second word, and subject' is the third word.
What's needed is a way to maintain each word as a separate item, even if that word contains multiple spaces. Quotes won't do it, but an [#faq5 array] will.
# Working example args=(-s "The subject" "$address") mail "${args[@]}" < $body
Usually, this question arises when someone is trying to use dialog to construct a menu on the fly. For an example of how to do this properly, see [#faq40 FAQ #40].