В bash можно избежать аргументов, содержащих пробелы.
foo "a string"
Это также работает для аргументов команды или функции:
bar() {
    foo "[email protected]"
}
bar "a string"
До сих пор так хорошо, но что, если я хочу манипулировать аргументами до вызова foo?
Это не работает:
bar() {
    for arg in "[email protected]"
    do
        args="$args \"prefix $arg\""
    done
    # Everything looks good ...
    echo $args
    # ... but it isn't.
    foo $args
    # foo "$args" would just be silly
}
bar a b c
Итак, как вы создаете списки аргументов, когда аргументы содержат пробелы?
