如何在bash中的双引号之间调用变量?

时间:2013-12-18 04:27:03

标签: bash variables

我正在尝试在脚本中执行此命令:

axel "$1"

其中“$ 1”是firefox插件FlashGot在脚本中发送给此命令的URL。但是,URL很长,并且不断缩短。解决这个问题的唯一方法是将URL括在单引号或双引号中......例如。的 “http:// ...”

提前谢谢。

编辑: 好的,所以URL的示例是http://audio-sjl-t1-2.pandora.com/access/Letting%20Go%20-%20Isaac%20Shepard%2Emp4a?version=4&lid=290476474&token=Z6TTYtio6FYbhzesbxzPyWA%2F%2Bfa2uT5atbV8L0QF%2FMubHshmLJ1hgkN6B8SMZe74V8Q1feGMNmkmyTJO343qYkQ3aklQVKo4mDE2VVl1nkYk05gu0%2BBfP3WtxTCrn8r0gz0wwDgMfzQd68fBcmOTKtB%2FjR2kqVs9ZY7tZQUuabjGcP84ws%2BuIsuTqkKkHyrWaaLkGhk71GoPng2IMrm0L%2B6MeyHu6bvWn%2FoqNhXNerpFLpRZqXZ8JrX9uKVkDmkeQxUVV5%2F8y8uv2yYpG3P5tx1mfAY6U7ZteDLCfCT4JQWzlZscpl7GmtW4gf64KBExGA98xucIp%2Bt1x%2Bjru2Jt%2F7PVeeKWGv2en0%2Fetf1CQWjVUbDoWy4q9cEnYOc7rkpX

嗯,它一直在

切断它
http://audio-sjl-t1-2.pandora.com/access/Letting%20Go%20-%20Isaac%20Shepard%2Emp4a?version=4

就是这一切都被送到了axel。

我在脚本中添加了一个echo命令:

#!/bin/bash
cd /home/caleb/Desktop
echo "$1"
axel "$1"

我可以通过终端发送一个URL来查看脚本的调试:

./axel.sh <URL>

我看到的唯一错误消息是因为缩短了网址。

以下是上述脚本的输出:

http://audio-sjl-t1-2.pandora.com/access/Letting%20Go%20-%20Isaac%20Shepard%2Emp4a?version=4
Initializing download: http://audio-sjl-t1-2.pandora.com/access/Letting%20Go%20-%20Isaac%20Shepard%2Emp4a?version=4
HTTP/1.1 400 Bad Request

2 个答案:

答案 0 :(得分:1)

axel "$1"应该有用,我并不感到惊讶axel ""$1""不起作用,因为这相当于axel $1

要调试这个,我们需要一条错误消息或其他东西,因为说“它不起作用”根本没有帮助。

你说这个脚本是从Firefox调用的。我不确定你是否可以轻松看到错误信息,也许你不能。我有一个想法。我们来调用你的脚本script.sh。像这样创建一个包装脚本script-wrapper.sh

#!/bin/bash
log=/tmp/script.log
for arg; do
    echo arg="'$arg'" | tee $log
done
/path/to/script.sh >>$log 2>&1

使此脚本可执行,从Firefox触发,然后查看日志,其中包括原始脚本的输出和错误输出。如果您仍然无法弄清楚出了什么问题,请编辑您的问题,然后粘贴/tmp/script.log的内容,以便我们进行调试。

<强>更新

根据您的更新,看起来脚本无法正确接收URL。特别是,当您将URL传递给脚本时,看起来没有正确引用URL。截止发生在&字符前面并不奇怪,因为这对shell来说意味着什么。您应该像这样调用您的脚本:

./axel.sh "http://....?version=4&lid=..."

但是这种情况并没有发生,它看起来没有双引号就被调用,这将导致你正在观察的行为。

答案 1 :(得分:0)

只需使用

#!/bin/sh
axel "$1"

工作。如果不是,您将需要提供更多信息......