如何在bash中用引号执行命令?

时间:2016-01-17 19:43:43

标签: bash raspberry-pi sh wget

基本上,我有一个文件(say.sh),它使用api来保存和播放文本到语音mp3文件。 api使用网址:http://api.voicerss.org/?key=keygoeshere&src=TEXT_GOES_HERE&hl=en-gb&c=mp3&r=1&f=32khz_8bit_stereo

脚本(下)使用wget来获取文件。从理论上讲,这段代码应该可行,但事实并非如此。如果我回显wget命令,它会返回一个成功运行的工作命令,但是一旦我删除了回音,它就会被引号弄糊涂并停止工作。

#!/bin/bash
TA="http://api.voicerss.org/?key=MY_KEY_IS_HERE&src="
TB="&hl=en-gb&c=mp3&r=1&f=32khz_8bit_stereo"
wget -O example.mp3 \"$TA$@$TB\"
omxplayer example.mp3

如果有人知道如何解决这个问题,那将非常有帮助。谢谢!

编辑:要运行命令,我尝试了sh say.sh Text heresh say.sh "Text here"。两者都不起作用-_-

2 个答案:

答案 0 :(得分:0)

我不知道您需要转义wget命令的任何引号,但我认为如果变量彼此相邻,您可以尝试使用{}

#!/bin/bash
TA="http://api.voicerss.org/?key=MY_KEY_IS_HERE&src="
TB="&hl=en-gb&c=mp3&r=1&f=32khz_8bit_stereo"
wget -O example.mp3 "${TA}${TB}"
omxplayer example.mp3

尝试一下,让我们知道它是怎么回事。

答案 1 :(得分:0)

感谢您的回复!我设法通过添加" $ {TA} $ {@} $ {TB}"来解决这个问题。并使用\"声明一个特殊字符:

#!/bin/bash
TA="http://api.voicerss.org/?key=keygoeshere&src=\""
TB="\"&hl=en-gb&c=mp3&r=1&f=32khz_8bit_stereo"
wget -O example.mp3 "${TA}${@}${TB}"
omxplayer example.mp3