使用包含多行字符串的参数数组调用bash函数

时间:2017-03-17 17:53:18

标签: bash

所以我有一个函数我想解包一个参数数组以形成参数序列:

#!/usr/bin/env bash

my_func() {
    echo "IN LEN: $#"  # Gives "6" -> Should be "4"
    echo "IN: $@"  # Gives "--a 1 --b 2 3 4" -> Should be "--a 1 --b 2\n3\n4"
}


read -r -d '' MULTI << EOM
2
3
4
EOM

ARGS=("--a" "1" "--b" "$MULTI")
echo "OUT LEN: ${#ARGS[@]}"  # 4
echo "OUT: ${ARGS[@]}"  # "--a 1 --b 2\n3\n4"

my_func ${ARGS[@]}

此示例演示了该问题以及我所期待的内容。设置IFS可能有些神奇吗?有什么建议吗?

PS。如果您需要更多上下文,请参阅我原来的问题:Handle optional function arguments

1 个答案:

答案 0 :(得分:3)

my_func ${ARGS[@]}更改为my_func "${ARGS[@]}"

如果没有括号双引号,则会扩展参数,shell将删除尾随的新行。