我正在尝试将命令字符串存储在变量中以供以后执行。问题是该命令包含一个带有空格的参数参数。执行命令时,shell 不会将参数视为单个字符串,而是将其解释为两个,包括双引号字符:
例子:
$ CMD_CMAKE="cmake -G \"MSYS Makefiles\" ../../source/poppler-0.79/"
$ ${CMD_CMAKE}
CMake Error: Could not create named generator "MSYS
我需要传递-G "MSYS Makefiles"
给cmake
命令。相反,-G \"MSYS
并且Makefiles\"
正在通过。
我尝试了以下所有方法均未成功:
$ CMD_CMAKE='cmake -G "MSYS Makefiles" ../../source/poppler-0.79/'
$ CMD_CMAKE="cmake -G 'MSYS Makefiles' ../../source/poppler-0.79/"
$ CMD_CMAKE="cmake -G MSYS\ Makefiles ../../source/poppler-0.79/"
$ CMD_CMAKE="cmake -G MSYS\\ Makefiles ../../source/poppler-0.79/"
$ GEN="MSYS Makefiles" && CMD_CMAKE="cmake -G ${GEN} ../../source/poppler-0.79/"
$ GEN="MSYS Makefiles" && CMD_CMAKE="cmake -G \"${GEN}\" ../../source/poppler-0.79/"
$ CMD_CMAKE=$(echo "cmake -G \"MSYS Makefiles\" ../../source/poppler-0.79/")
$ CMD_CMAKE=$(echo 'cmake -G "MSYS Makefiles" ../../source/poppler-0.79/')
我在谷歌上做了一些搜索,但我没有找到任何答案。也许是因为我没有使用正确的术语。
编辑: 对不起,我想我应该在 stackoverflow.com 上发布这个问题。
感谢 jesse_b 和 Kusalananda 帮助找到这个解决方案。
其实很简单。要存储命令及其参数,请将它们放在一个数组中,用双引号将任何带有空格的参数括起来:
要执行它,变量应该用双引号括起来:
frabjous 提到的另一个解决方案是使用以下
eval
命令: