使用包含&符号的参数调用Bash函数

时间:2017-10-07 17:43:29

标签: bash aria2

我想要一个bash函数来改变这个......

download HELLO&P=1&Q=2

进入这个...

aria2c -d ~/Downloads "HELLO&P=1&Q=2"

HELLO&P=1&Q=2是一个MAGNET链接。如果它周围没有双引号,aria2c不起作用。但我似乎无法将它们放在一起。问题似乎是MAGNET链接末尾有一系列&key=value对(在我的例子&P=1&Q=2中),这些似乎被剥离并与链接的其余部分分开(即{ {1}})。

这是我的HELLO功能。

.bash_profile

以下是输出示例。

download() {
  aria2c -d ~/Downloads "$1"
}

甚至不确定~ $ download HELLO&P=1&Q=2 [1] 7389 [2] 7390 aria2c -d /Users/lukejanicke/Downloads HELLO [1]- Done download HELLO [2]+ Done P=1 ~ $ 的去向。使用真实的MAGNET链接,所有部件都以此枚举方式显示。

我需要一些方法将整个MAGNET链接捕获为单个参数,然后在链接周围用引号执行Q=2命令。

2 个答案:

答案 0 :(得分:2)

&是shell中的特殊字符。您需要引用包含它的字符串:

download 'HELLO&P=1&Q=2'

否则,它被理解为在后台运行左侧的命令分隔符。

答案 1 :(得分:2)

双引号使bash解释内部字符串。

我用以下方法对其进行了测试:

$ download() {   aria2c -d ~/Downloads "$1"; }
victor 0 12:48 /Users/victor/tmp

$ download "http://localhost:8080/HELLO&P=1&Q=2"

10/07 12:48:56 [NOTICE] Downloading 1 item(s)

10/07 12:48:56 [ERROR] CUID#7 - Download aborted. 
URI=http://localhost:8080/HELLO&P=1&Q=2E