巴什?从readarray创建数组但不手动声明时出现

Tom*_*ith 5 arrays bash

我有一个ID文件(my_ID_file),每行一个ID,没有其他多余的白色空格.它是使用cut命令从另一个文件创建的.该文件看起来像101行...

PA10 
PA102 
PA103 
PA105  
PA107 
PA109 
Run Code Online (Sandbox Code Playgroud)

我试图在for循环中使用这些ID来创建目录结构.所以我使用readarray函数来创建数组...

readarray TIDs < my_ID_file
Run Code Online (Sandbox Code Playgroud)

然后使用for循环来创建目录结构......

for T in "${TIDs[@]}"
do
mkdir "$T"_folder
done
Run Code Online (Sandbox Code Playgroud)

这会产生名为....的目录

PA10?_folder
PA102?_folder 
PA103?_folder 
PA105?_folder 
PA107?_folder 
PA109?_folder
Run Code Online (Sandbox Code Playgroud)

但是,如果我手动声明数组....

TIDs=(PA10 PA102 PA103 PA105 PA107 PA109)
Run Code Online (Sandbox Code Playgroud)

然后运行for循环我得到正确的目录结构,如....

PA10_folder
PA102_folder 
PA103_folder 
PA105_folder 
PA107_folder 
PA109_folder
Run Code Online (Sandbox Code Playgroud)

这些问号来自哪里?如何从这样的文件中声明数组,而不会在后续使用数组时出现这个问号?

谢谢

gle*_*man 9

您的文本文件具有DOS样式的行结尾."?" 出现是因为回车会弄乱ls输出.尝试od -c my_ID_file

解: dos2unix my_ID_file

#2:readarray默认情况下不删除该行的换行符.你真的想要

readarray -t TIDs < my_ID_file
Run Code Online (Sandbox Code Playgroud)

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