如何在双引号中将变量作为命令参数?

How to give variable as command parameter in double quotes?

我需要执行一个命令,它有一个参数,需要用双引号引起来:

cmd --key1 --key2 "some parameter in \"double\" quotes and with {brackets}"

这在终端上运行良好,但是当我使用 .sh 脚本时: mess.txt: some parameter in \"double\" quotes and with {brackets}

不是这个

message=$(cat mess.txt)
cmd --key1 --key2 "$message"

也不是这个

message=$(cat mess.txt)
cmd --key1 --key2 \"$message\"

也不是这个

message=$(cat mess.txt)
cmd --key1 --key2 "\"$message\""

有效,但是 在终端工作中的执行结果:

message=$(cat mess.txt)
echo "cmd --key1 --key2 \"$message\""

有什么想法,如何从脚本执行这个?

更新:如果我将 " 放入文件并仅使用 $message,这也不起作用。

[正在将我的评论转换为答案]

为什么在写入文件时要转义双引号?你不需要那样做。您在原始命令中转义的唯一原因是因为您已经在外部使用了双引号。

在我的终端中:

➜  Temp  cat temp.txt
some parametr in "double" quotes and with {brackets}
➜  Temp  cat temp.py
import sys

print "\n".join(sys.argv)
➜  Temp  python temp.py "$(cat temp.txt)"
temp.py
some parametr in "double" quotes and with {brackets}

此外,在您的原始命令中,您可以使用单引号来避免双引号转义。

➜  Temp  python temp.py 'some parametr in "double" quotes and with {brackets}'
temp.py
some parametr in "double" quotes and with {brackets}