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

Calling a Bash function with an argument that has an ampersand in it

我想要一个 bash 函数来转换这个……

download HELLO&P=1&Q=2

进入这个……

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

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

这是我的 .bash_profile 函数。

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

这是一个示例输出。

~ $ download HELLO&P=1&Q=2
[1] 7389
[2] 7390
aria2c -d /Users/lukejanicke/Downloads HELLO
[1]-  Done                    download HELLO
[2]+  Done                    P=1
~ $ 

甚至不确定 Q=2 去了哪里。使用真正的 MAGNET links,所有部件都以这种枚举方式显示。

我需要一些方法将整个 MAGNET link 捕获为单个参数,然后在 link.

周围执行带有引号的 aria2c 命令

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

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

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

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

我测试过:

$ download() {   aria2c -d ~/Downloads ""; }
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