使用参数数组(包括多行字符串)调用 bash 函数

Ale*_*ord 0 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[@]}
Run Code Online (Sandbox Code Playgroud)

这个例子演示了这个问题和我的期望。也许设置有一些魔法IFS?有什么建议么?

附言。如果您需要更多上下文,请参阅我原来的问题:处理可选函数参数

小智 5

改成my_func ${ARGS[@]}my_func "${ARGS[@]}"

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