foo()
{
mapfile -t arr <<< "${1}"
for i in "${!arr[@]}"
do
if [ -z "${arr[$i]}" ]
then
unset arr[$i]
fi
done
}
當我通過與它的一些內容(大串基本上)一個變量,我想:如何跳過帶mapfile/readarray的bash中的空行?
- 第一空格作爲第一個空格後的關鍵,之前的一切解釋的第一個字成爲在我的關聯數組該密鑰的條目
- 跳過空行或只用一個換行
例如(不包括用於緊湊空行)
google https://www.google.com
yahoo https://www.yahoo.com
microsoft https://www.microsoft.com
陣列應該像
[ google ] == https://www.google.com
[ yahoo ] == https://www.yahoo.com
[ microsoft ] == https://www.microsoft.com
我還沒有發現在bash的手冊2點什麼好的解決辦法,功能foo
,你看到它是一種創建數組的黑客攻擊並且只有在它遍歷整個數組並刪除字符串爲空的條目後。
所以點2得到的解決方案,可能是一個低效的,但它的工作原理,但1點還沒有一個很好的解決方案,而另一種方法是隻創建一個陣列,同時在與read
迭代,就我知道 。
你知道如何改善嗎?
也有一個原因,爲什麼我不願意使用'read','read'通常會將條目混洗,並且不會複製原始順序,'mapfile'通常會保持與原始順序相同的順序字符串/文件。 – user2485710 2014-10-05 21:08:15
'mapfile'以原始順序保存所有內容,因爲它不會創建關聯數組。 'read'與你構建的數組無關,但是當你使用它時,實際上你實際上是將一個項目添加到一個關聯數組中。 – chepner 2014-10-05 21:09:50
@chepner這就是我想要的,一個'mapfile'創建了我的文章中描述的關聯數組,我沒有關於這兩個點是否可行的最後一句話,只用了bash中的內建命令。 – user2485710 2014-10-05 21:11:46