我需要执行一个带参数的命令,需要用双引号:
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,这也不起作用。
答案 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}