2013-11-26 47 views
0

我試圖從循環中獲取basename,但這隻會返回我"*"Bash - 從循環中獲取基本名稱

FILES=("/home/aaaa/bbbb/*") #Get all folders 
for f in "${FILES[@]}" 
do 
    basename "$f" 
done 

我做錯了什麼?

+0

考慮答案的任何一個作爲您的查詢的解決方案,是否直接 「ls -1/home/aaaa/bbbb /」不會導致您的預期結果? – user1587504

回答

4

通過使用("/home/aaaa/bbbb/*"),只創建一個字符串"/home/aaaa/bbbb/*"的數組。

相反,擺脫了引號的,簡單地說:

FILES=(/home/aaa/bbb/*) 
for f in "${FILES[@]}" 
do 
    basename "$f" 
done 
4

你甚至都不需要創建一個數組,並執行你的循環是這樣的:

for f in /home/aaaa/bbbb/* 
do 
    # get the basename using pure BASH 
    base="${f##*/}" 
    echo "base is: $base" 
done 
+0

這適用於帶有空格的文件名。分詞後發生路徑名擴展。 – chepner

+3

返回數組,'names =(/ home/aaaa/bbbb/*); basenames =(「$ {names [@] ## * /}」)'也適用。沒有明確的循環需要。 – chepner