Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我得到了一个提示,可以在 Bash 脚本中使用文件通配符array=($(ls))而不是 ls,在我的代码中,我按照说明操作并替换为:
array=($(ls))
function list_files() { for f in *; do [[ -e $f ]] || continue done } array=($(list_files))
但是新函数没有返回任何东西,我在这里做错了吗?
简单地写这个:
array=(*)
撇开您的“list_files”不输出任何内容不谈,您的方法还有其他问题。
未引用的命令替换(在您的情况下为“$(list_files)”)仍将受到“分词”和“路径名扩展”(参见 bash(1)“EXPANSION”)的影响,这意味着如果“list_files”中有空格输出时,它们将用于将其拆分为数组元素,如果存在模式字符,它们将用于尝试将当前目录文件名匹配并替换为单独的数组元素。
OTOH,如果您用双引号引用命令替换,那么整个输出将被视为单个数组元素。