![如何从文件名 glob 创建一个可能为空的数组?](https://linux22.com/image/128430/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E5%90%8D%20glob%20%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%8F%AF%E8%83%BD%E4%B8%BA%E7%A9%BA%E7%9A%84%E6%95%B0%E7%BB%84%EF%BC%9F.png)
有了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 允许不匹配文件的文件名模式扩展为空字符串,而不是它们本身。