我有一個腳本,它正在搜索音樂文件的目錄樹,根據特定屬性從音樂文件的完整路徑名中提取相關信息(流派,藝術家,音軌,專輯),將格式化的子串存儲爲數組中的元素,然後根據命令行上傳遞的選項(例如按照專輯排序)對數組元素進行排序。除了for循環的最後一次迭代的結果輸出似乎並沒有作爲數組中的新元素存儲之外,一切似乎都很好地工作。在查詢Bash數組的信息後,我發現數組大小沒有限制。所以我留下了深深的疑惑,爲什麼每個其他迭代的每個輸出直到最後一個迭代被存儲在數組中。如果你看下面的輸出,你可以看到最後的元素應該是軌道「苔原」。Bash:只有循環索引的最後一次迭代不被存儲爲數組的新元素
(more output above ...)
-->./Hip-Hop/OutKast/Stankonia/Toilet Tisha.aif<--
GENRE:
Hip-Hop
ARTIST:
OutKast
ALBUM:
Stankonia
TITLE:
Toilet Tisha
-->./Electronic/Squarepusher/Hard Normal Daddy/Cooper's World.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Hard Normal Daddy
TITLE:
Cooper's World
-->./Electronic/Squarepusher/Hard Normal Daddy/Papalon.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Hard Normal Daddy
TITLE:
Papalon
-->./Electronic/Squarepusher/Hard Normal Daddy/Vic Acid.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Hard Normal Daddy
TITLE:
Vic Acid
-->./Electronic/Squarepusher/Go Plastic/Go! Spastic.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Go Plastic
TITLE:
Go! Spastic
-->./Electronic/Squarepusher/Go Plastic/Greenways Trajectory.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Go Plastic
TITLE:
Greenways Trajectory
-->./Electronic/Squarepusher/Go Plastic/My Red Hot Car.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Go Plastic
TITLE:
My Red Hot Car
-->./Electronic/Squarepusher/Feed Me Weird Things/Kodack.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Feed Me Weird Things
TITLE:
Kodack
-->./Electronic/Squarepusher/Feed Me Weird Things/North Circular.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Feed Me Weird Things
TITLE:
North Circular
-->./Electronic/Squarepusher/Feed Me Weird Things/Tundra.aif<--
GENRE:
Electronic
ARTIST:
Squarepusher
ALBUM:
Feed Me Weird Things
TITLE:
Tundra
正如你所看到的,DEBUG部分的最後一次迭代應該是標題「Tundra」。但是,當我顯示數組「track_list」的內容時,除「苔原」之外,每個軌道都以所需的格式打印(查看附件.png文件)。有沒有人有任何想法,爲什麼這可能是?這裏是我的腳本的一部分:
#more code above ...
#create arrays
declare -a track_list
declare -a directory_contents
#populate directory with files
cd $directory
directory_contents=$(find . -mindepth 1 -type f)
cd ..
IFS=$'\n'
#store each file of directory in track_list
for music_file in ${directory_contents[*]}; do
if [ -n "$DEBUG" ] ; then echo "-->$music_file<--"; fi
this_genre=$(echo $music_file | awk -F"/" '{print $2}')
this_artist=$(echo $music_file | awk -F"/" '{print $3}')
this_album=$(echo $music_file | awk -F"/" '{print $4}')
this_title=$(echo $music_file | awk -F"/" '{print $5}' |\
awk -F".aif" '{print $1}' || awk -F".mp3" '{print $1}' ||\
awk -F".wav" '{print $1}' || awk -F".flac" '{print $1}' \
|| awk -F".m4a" '{print $1}')
function artist_list
{
track=$(printf "%-20s\t\t%-30s\t\t%-30s\t\t%-10s\n"\
"$this_artist" "$this_title" "$this_album" "$this_genre")
track_list=("${track_list[*]}" $track)
}
if [[ $genre = "true" ]] ; then
track=$(printf "%-10s\t\t%-20s\t\t%-30s\t\t%-30s\n"\
"$this_genre" "$this_artist" "$this_title" "$this_album")
track_list=("${track_list[*]}" $track)
elif [[ $artist = "true" ]] ; then
artist_list
elif [[ $album = "true" ]] ; then
track=$(printf "%-30s\t\t%-20s\t\t%-30s\t\t%-10s\n"\
"$this_album" "$this_artist" "$this_title" "$this_genre")
track_list=("${track_list[*]}" $track)
elif [[ $title = "true" ]] ; then
track=$(printf "%-30s\t\t%-20s\t\t%-30s\t\t%-10s\n"\
"$this_title" "$this_artist" "$this_album" "$this_genre")
track_list=("${track_list[*]}" $track)
else
artist_list
fi
if [ -n "$DEBUG" ]; then
echo "GENRE:"
echo $this_genre
echo "ARTIST:"
echo $this_artist
echo "ALBUM:"
echo $this_album
echo "TITLE:"
echo $this_title
echo ""
fi
done
unset IFS
if [[ $genre = "true" ]] ; then
./mulib g
elif [[ $artist = "true" ]] ; then
./mulib a
elif [[ $album = "true" ]] ; then
./mulib m
elif [[ $title = "true" ]] ; then
./mulib t
else
./mulib
fi
echo "$track_list" | sort
echo ""
我不知道這最後一個問題的一部分手頭解決了上述問題。你能更具體地說明最後一篇文章如何解決最後一次迭代沒有作爲數組中的新元素存儲的問題嗎?據我所知,這不是我在最後一個問題中提出的問題...... – dtg 2011-05-27 20:10:11
@Dylan:弗雷德裏克的意思是,如果上一個問題的答案之一解決了它,你應該[勾選複選標記到答案](http://stackoverflow.com/faq#howtoask)。至於這個問題,這是相當長的一段代碼,我推薦先嚐試調試它,方法是在腳本的頂部放置'set -x',以便在運行時產生每行的跟蹤信息,並嘗試查找哪裏跟蹤輸出開始看起來錯誤。 – Gilles 2011-05-27 20:17:24
[你已經得到](http://stackoverflow.com/questions/6116990/bash-cant-read-out-strings-with-spaces-after-looping-through-array-of-strings)幾個好建議如何用10行代碼寫你的作業......你想達到什麼目的? – jm666 2011-05-27 20:21:22