1

我得到了一个提示,可以在 Bash 脚本中使用文件通配符array=($(ls))而不是 ls,在我的代码中,我按照说明操作并替换为:

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

但是新函数没有返回任何东西,我在这里做错了吗?

4

1 回答 1

3

简单地写这个:

array=(*)

撇开您的“list_files”不输出任何内容不谈,您的方法还有其他问题。

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

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

于 2013-04-30T09:55:01.727 回答