处理 bash 中没有匹配文件的通配符

处理 bash 中没有匹配文件的通配符

我正在尝试将文件从目录读入数组,但即使文件不存在,它也会保存到数组中。如果文件名不存在,我想排除它。

a=(/tmp/nofileexists) && echo ${#a[@]} && echo ${a[@]}
1
/tmp/nofileexists

该路径可能包含通配符。

a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}

答案1

当文件名扩展失败时,您可以使用nullglob返回空字符串:bash

$ shopt -s nullglob
$ a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
0
<blank line>

或者使用failglob报错:

$ shopt -s failglob
$ a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
bash: no match: /tmp/nofileexists*.pdf

相关内容