我得到了在Bash腳本LS代替使用file globbing一個尖,在我的代碼我遵循的指示和更換array=($(ls))
到:猛砸取代LS與循環
function list_files() { for f in *; do [[ -e $f ]] || continue done }
array=($(list_files))
但是新功能DOEN」沒有任何回報,我在這裏做錯了什麼?
我得到了在Bash腳本LS代替使用file globbing一個尖,在我的代碼我遵循的指示和更換array=($(ls))
到:猛砸取代LS與循環
function list_files() { for f in *; do [[ -e $f ]] || continue done }
array=($(list_files))
但是新功能DOEN」沒有任何回報,我在這裏做錯了什麼?
簡單地寫:
array=(*)
撇開你的「list_files」不輸出任何東西,還有其他的問題,你的方法。 (你的情況「$(list_files)」)仍然會受到「分詞」和「路徑擴展」的影響(見bash(1)「EXPANSION」),這意味着如果有空格在「list_files」輸出中,將使用它們將其分割爲數組元素,並且如果有模式字符,它們將用於嘗試匹配當前目錄文件名並將其替換爲單獨的數組元素。
OTOH,如果用雙引號引用命令替換,那麼整個輸出將被視爲單個數組元素。
謝謝,這是做的伎倆! – 2013-05-03 10:32:36
'$(function)'被函數打印到標準輸出的內容替換。你的功能不會打印任何東西。 – Barmar 2013-04-30 08:51:38
一旦你解決了這個問題,它並不能解決你的問題。解析'list_files'函數的輸出與解析'ls'的輸出有同樣的問題。如果一個文件名包含空格,當您分配給該數組時,它將被視爲兩個名稱。你需要在'for'循環中做你想做的一切。在那個頁面的例子中,有一個'...',這是你對每個文件做你想要的東西的地方。 – Barmar 2013-04-30 08:57:01
好的,所以上面的問題是測試有效,但實際上並沒有做任何事情。它只是看到文件存在,然後靜靜地繼續前進。如果您在
[[ -e $f ]]
測試之前放echo $f
,則它會檢出檢測到的文件。但是,當echo聲明在代碼中傳遞時,這並不是我需要它工作的方式;腳本回應文件,然後填充數組,再次回顯相同的文件...當我刪除回聲語句時,數組未被填充,並且沒有任何管線被輸出。有沒有辦法將for循環中的文件轉換爲變量或 – 2013-04-30 09:01:40