我获得了一个提示,使用file globbing代替Bash脚本中的ls,在我的代码中,我按照说明操作并将array=($(ls))
替换为:
function list_files() { for f in *; do [[ -e $f ]] || continue done }
array=($(list_files))
然而,新功能没有返回任何东西,我在这里做错了吗?
答案 0 :(得分:3)
只需写下:
array=(*)
除了你的“list_files”没有输出任何内容之外,你的方法还有其他问题。
不带引号的命令替换(在您的情况下为“$(list_files)”)仍然会受到“分词”和“路径名扩展”(参见bash(1)“EXPANSION”),这意味着如果有空格“list_files”输出,它们将用于将其拆分为数组元素,如果有模式字符,它们将用于尝试匹配并将当前目录文件名替换为单独的数组元素。
OTOH,如果用双引号引用命令替换,则整个输出将被视为单个数组元素。