2017-10-07 18 views
0

我想要一個bash函數變成這樣的一個符號參數...調用bash函數與中有

download HELLO&P=1&Q=2 

這個......

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

HELLO&P=1&Q=2是一塊磁鐵鏈接。如果它周圍沒有雙引號,aria2c不起作用。但我似乎無法將它們放在一起。問題似乎是MAGNET鏈接最後有一系列&key=value對(在我的示例中爲&P=1&Q=2),並且這些鏈接似乎被剝離並與鏈接的其餘部分分離(即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 
~ $ 

甚至不知道哪裏去了Q=2。有了真正的MAGNET鏈接,所有部件都以這種列舉方式顯示。

我需要一些捕獲整個MAGNET鏈接作爲單個參數,然後執行aria2c命令的鏈接引號。

+0

回覆: 「其中,Q = 2去」 - 這是執行的(在前臺,VS'P = 1'在子shell後臺發生的那然後在完成該一行/三字符命令後退出)。如果在同一個shell中運行'echo'$ Q「',輸出將是'2'。 –

回答

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 
+0

看來你必須在手動鏈接周圍的引號 – lukejanicke

+0

是的,請注意,當你打電話下載,你也可以使用單引號。這是否解決你的問題? –

+0

這不是我想要的,但它似乎和我一樣好。 – lukejanicke

2

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

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

否則,它被理解爲在後臺運行左側的命令分隔符。