如何将变量 args="foo bar=\"baz qux\"" 作为 *2* 个参数传递?

How to pass a variable args="foo bar=\"baz qux\"" as exactly *2* arguments?

采用以下脚本:

#!/bin/bash

function print_args() {
    arg_index=1
    while [ $# -gt 0 ]; do
        echo "$arg_index: "
        arg_index=$(expr $arg_index + 1)
        shift
    done
    echo
}

echo "print_args foo bar=\"baz qux\""
echo "-----------------------------------------------"
print_args foo bar="baz qux"

args="foo bar=\"baz qux\""

echo "print_args $args (args=\"foo bar=\\"baz qux\\"\")"
echo "-----------------------------------------------"
print_args $args

echo "print_args \"$args\" (args=\"foo bar=\\"baz qux\\"\")"
echo "-----------------------------------------------"
print_args "$args"

输出如下:

print_args foo bar="baz qux"
-----------------------------------------------
1: foo
2: bar=baz qux

print_args $args (args="foo bar=\"baz qux\"")
-----------------------------------------------
1: foo
2: bar="baz
3: qux"

print_args "$args" (args="foo bar=\"baz qux\"")
-----------------------------------------------
1: foo bar="baz qux"

我想要得到的输出如下:

-----------------------------------------------
1: foo
2: bar="baz qux"

这是print_args foo bar="baz quz"的结果。但是,我需要它是使用单个变量参数调用 print_args 的结果。我最终想弄清楚如何在设置为 运行

的 shell 脚本中将多个参数传递给 CMake
cmake ${cmake_flags} ../${target}

cmake_flags 中的一些选项需要用引号引起来,因为它们包含空格,但我总体上希望 CMake 能够识别传递给它的多个不同选项,如果我引用 [=17] 则不会发生这种情况=].

改用数组语法,如下:

cmake_flags=( foo bar="baz qux" )

cmake "${cmake_flags[@]}"