如何执行 bash 中带引号的命令?

How do I execute commands with quotation marks in bash?

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

脚本(如下)使用 wget 获取文件。理论上,这段代码应该可以工作,但实际上并没有。如果我回显 wget 命令,它 returns 是一个工作命令,成功 运行s,但是一旦我删除回显,它就会被引号混淆并停止工作。

#!/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" 的命令。两者都不起作用 -_-

我不知道您需要为 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

试一试,告诉我们进展如何。

感谢您的回复!我设法通过添加 "${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