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

时间:2015-02-19 15:43:57

标签: bash sh

我需要执行一个带参数的命令,需要用双引号:

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,这也不起作用。

1 个答案:

答案 0 :(得分:1)

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

为什么在将它写入文件时会转义双引号?你不需要那样做。只有你在原始命令中转义它的原因只是因为你已经在外面有双引号。

在我的终端:

➜  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}