在 Ash / Bash 中构建选项字符串时如何正确引用空格?

How to properly quote spaces when building a string of options in Ash / Bash?

livy@linux:~$ qemu_options="-enable-kvm -name \"Virtual Machine 1\"";
livy@linux:~$ qemu_options="$qemu_options -cpu host -smp cores=4 -m 2G";
livy@linux:~$ echo "$qemu_options";
-enable-kvm -name "Virtual Machine 1" -cpu host -smp cores=4 -m 2G
livy@linux:~$ qemu-system-x86_64 $qemu_options;
qemu-system-x86_64: Machine: Could not open 'Machine': No such file or directory

我已经尝试并成功保留了 Virtual Machine 1 字符串周围的引号。为什么它不起作用?以及如何正确引用它?

Why does it not work?

因为分词是在其他扩展的未引用结果上识别引号之后执行的。 expans的内容不扫描,只拆分

how to quote it properly?

使用 bash 个数组。

如果没有,使用函数。

如果您已经用尽了任何其他选择,请使用 eval 进入阴暗面并适当地用双引号引起来并在调用时重新评估它们。请记住,eval 与邪恶仅差一个字母。

qemu_options="$(printf " %q" -enable-kvm -name "Virtual Machine 1")"
qemu_options+="$(printf " %q" -cpu host -smp cores=4 -m 2G")"
eval qemu-system-x86_64 "$qemu_options"