【问题标题】:How do I execute commands with quotation marks in bash?如何在 bash 中执行带引号的命令?
【发布时间】:2016-01-18 04:08:40
【问题描述】:

基本上,我有一个文件 (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"。两者都不起作用-_-

【问题讨论】:

    标签: bash raspberry-pi sh wget


    【解决方案1】:

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

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

    【讨论】:

    • 我应该在帖子中提到,wget中的url需要引号,因为url中会有空格。我试过"${TA}${@}${TB}",它返回了相同的结果
    • 啊,设法用这个和\"修复它!谢谢你的帮助!
    • 如果重要,您可以尝试对“文本”字段使用 HTML 编码。 “空格”的 HTML 实体是“%20”。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 2023-02-14
      • 2021-11-28
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多