如何从文件名 glob 创建一个可能为空的数组?

如何从文件名 glob 创建一个可能为空的数组?

有了zsh,就不难创建一个可能是空的来自(可能为空)文件名 glob 结果的数组。例如:

% pathlist=( /no/such/path/*(N) ); printf -- "%d\n" $#pathlist
0

bash然而,当 glob 为 null 时,我能想到的与上面代码最接近的近似值无法生成空数组:

% pathlist=( /no/such/path/*    ); printf -- "%d\n" ${#pathlist[@]} )
1

在本例中,pathlist变量包含单个条目,即字符串“/no/such/path/*”。

如何修改bash代码,以便pathlist每个文件只包含一个条目(如果有的话)与全局匹配?

答案1

您需要使用 shell 选项nullglob

#!/bin/bash
shopt -s nullglob
pathlist=( /no/such/path/*    ); printf -- "%d\n" "${#pathlist[@]}" )
shopt -u nullglob

Bash 手册对 shell 选项的描述如下nullglob

如果设置,Bash 允许不匹配文件的文件名模式扩展为空字符串,而不是它们本身。

相关内容