Bash用for循环替换ls

时间:2013-04-30 08:44:45

标签: bash for-loop ls

我获得了一个提示,使用file globbing代替Bash脚本中的ls,在我的代码中,我按照说明操作并将array=($(ls))替换为:

function list_files() { for f in *; do [[ -e $f ]] || continue done }
array=($(list_files))

然而,新功能没有返回任何东西,我在这里做错了吗?

1 个答案:

答案 0 :(得分:3)

只需写下:

array=(*)

除了你的“list_files”没有输出任何内容之外,你的方法还有其他问题。

不带引号的命令替换(在您的情况下为“$(list_files)”)仍然会受到“分词”和“路径名扩展”(参见bash(1)“EXPANSION”),这意味着如果有空格“list_files”输出,它们将用于将其拆分为数组元素,如果有模式字符,它们将用于尝试匹配并将当前目录文件名替换为单独的数组元素。

OTOH,如果用双引号引用命令替换,则整个输出将被视为单个数组元素。