如何将变量 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[@]}"
采用以下脚本:
#!/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
的结果。我最终想弄清楚如何在设置为 运行
cmake ${cmake_flags} ../${target}
cmake_flags
中的一些选项需要用引号引起来,因为它们包含空格,但我总体上希望 CMake 能够识别传递给它的多个不同选项,如果我引用 [=17] 则不会发生这种情况=].
改用数组语法,如下:
cmake_flags=( foo bar="baz qux" )
cmake "${cmake_flags[@]}"