如何在双引号中将变量作为命令参数?
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}
我需要执行一个命令,它有一个参数,需要用双引号引起来:
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}