2015-05-08 56 views
-1

我有以下腳本保存在我的道路「lspkg」:爲什麼bash不能在文件路徑中轉義空格或引號?

#!/bin/bash 
args=("[email protected]") 

for item in ${args[@]}; do 
    echo "$item" 
done 

當我運行lspkg /absolute/path/to/file,它按預期工作,打印路徑。但是,下列行爲造成我的麻煩一個很好的協議:

擺脫空間的路徑並沒有真正轉義空格:

$ lspkg /absolute/path/to/file\ with\ spaces 
/absolute/path/to/file\ 
with\ 
spaces 

把路徑用引號不作bash的把它看成單個字符串:

$ lspkg "/absolute/path/to/file with spaces" 
"/absolute/path/to/file 
with 
spaces" 

這是爲什麼,這個問題怎麼解決?

+3

嘗試在'$ {args [@]}周圍加引號' – inetknght

+0

這個問題的根源實際上是腳本在我的機器上運行的方式,但我發佈的代碼仍然有錯誤。 – lowtex

回答

5

重要引號從您的腳本丟失,請使用:

#!/bin/bash 
args=("[email protected]") 

for item in "${args[@]}"; do 
    echo "$item" 
done 

沒有引號"${args[@]}"外殼擴大,把它當作多個參數。

+0

這個工作適合你嗎? – anubhava