2014-03-02 23 views
3

我有一個文件(my_ID_file)的ID,每行一個ID,沒有其他多餘的白色空格。它是使用cut命令從另一個文件創建的。該文件看起來像這101行...Bash?陣列從readarray創建,但沒有手動聲明時出現

PA10 
PA102 
PA103 
PA105 
PA107 
PA109 

我想在for循環中使用這些ID來創建一個目錄結構。所以我用readarray功能,例如創建陣列......

readarray TIDs < my_ID_file 

,然後用一個for循環這樣創建的目錄結構...

for T in "${TIDs[@]}" 
do 
mkdir "$T"_folder 
done 

這將產生命名的目錄。 ...

PA10?_folder 
PA102?_folder 
PA103?_folder 
PA105?_folder 
PA107?_folder 
PA109?_folder 

然而,如果我喜歡手動聲明數組....

TIDs=(PA10 PA102 PA103 PA105 PA107 PA109) 

,然後運行for循環我得到這樣生成了正確的目錄結構....

PA10_folder 
PA102_folder 
PA103_folder 
PA105_folder 
PA107_folder 
PA109_folder 

在哪裏這些問號是從哪裏來的?我怎麼能從這樣的文件中聲明數組,而不會在隨後的數組中使用這個問號?

感謝

+0

你肯定有在my_ID_file沒有不可見的字符?試試'cat -vet my_ID_file'使它們可見。 –

+0

好的謝謝,我不能找到他們時,複製到文本wrangler,但使用這種方法$後綴每行,即PA10 $ PA102 $等我怎樣才能擺脫這些看不見的字符?這些是從我使用的切割方法創建的? –

+0

'$'是正常的;這是'cat -e'顯示行結束的位置(所以你可以分辨「PA10 $'」和「PA10 $'」之間的區別)。 –

回答

7

你的文本文件具有DOS樣式行結尾。 「?」出現,因爲回車會搞亂 ls輸出。嘗試 od -c my_ID_file

解決方案: dos2unix my_ID_file

採取#2:readarray默認情況下不刪除行的換行符。你真的想

readarray -t TIDs < my_ID_file 

參考:http://www.gnu.org/software/bash/manual/bashref.html#index-mapfile