首页 > 解决方案 > 如何将变量 args="foo bar=\"baz qux\"" 作为 *2* 参数传递?

问题描述

采取以下脚本:

#!/bin/bash

function print_args() {
    arg_index=1
    while [ $# -gt 0 ]; do
        echo "$arg_index: $1"
        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 能够识别传递给它的多个不同选项,如果我引用cmake_flags.

标签: bashargumentsquotingvariable-expansion

解决方案


请改用数组语法,如下所示:

cmake_flags=( foo bar="baz qux" )

cmake "${cmake_flags[@]}"

推荐阅读