user977828 Asked: 2019-05-10 17:01:59 +0800 CST2019-05-10 17:01:59 +0800 CST 2019-05-10 17:01:59 +0800 CST 如何获取目录中的文件列表 772 我尝试创建一个将文件名存储在文件夹中的数组/列表。以下命令出于未知原因创建了一个:. 怎么可能去掉:? > a=$(ls split*) > echo $a split_sam.o4433568 split_sam.o4433616 split_sam.o4441795 split-data-1: bash files 1 个回答 Voted Best Answer Jeff Schaller 2019-05-10T17:33:58+08:002019-05-10T17:33:58+08:00 $(ls split*) 命令没有创建任何文件名——幸运的是!它也没有创建数组。它所做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[@]}"
$(ls split*
) 命令没有创建任何文件名——幸运的是!它也没有创建数组。它所做ls
的是使用通配符调用split*
,然后将所有结果输出粘贴在一起(删除ls
在每个文件名之间和最后添加的换行符)并将该集团分配给您的变量。然后,当您调用echo $a
时,发生了您不想要的额外处理:变量的内容进一步受到空格($IFS)和通配符扩展的拆分。你很幸运没有命名任何文件,例如,split space file
或split more*
!您困惑的根源在于您确实
split-data-1:
在该目录中有一个名为的文件,并且ls
很乐意将其交还给您。相反,您想要做的是找到一个适合您真正想要的文件的通配符,并使用简单的数组分配:
或者
正如您最初写的那样,它仍将包含该
split-data-1:
文件。然后,您可以遍历文件或将它们作为一个整体进行操作:
或者