有了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 允许不匹配文件的文件名模式扩展为空字符串,而不是它们本身。