我尝试创建一个数组/列表,将文件名存储在文件夹内。以下命令出于未知原因创建了一个:
.怎么可能去除:
?
> a=$(ls split*)
> echo $a
split_sam.o4433568 split_sam.o4433616 split_sam.o4441795 split-data-1:
答案1
)命令$(ls split*
没有创造任何文件名——幸运的是!它也没有创建数组。什么做过do 是ls
使用split*
通配符调用的,然后将所有结果输出粘贴在一起(删除ls
每个文件名之间和最后添加的换行符)并将该组合分配给您的变量。当您随后致电时echo $a
,额外的发生了一些您不想要的处理:变量的内容进一步受到空格($IFS)和通配符扩展的分割。您很幸运,没有任何名为的文件,例如,split space file
或split more*
!
您困惑的根源在于您确实split-data-1:
在该目录中有一个名为的文件,并且ls
很乐意将其交还给您。
相反,您想要做的是找到适合您真正想要的文件的通配符,并使用简单的数组赋值:
a=(split_sam*)
或者
a=(split*)
正如您最初所写,其中仍将包含该split-data-1:
文件。
然后,您可以迭代这些文件或将它们作为一个整体进行操作:
for file in "${a[@]}"
do
ls -d -- "$file"
done
或者
ls -d -- "${a[@]}"