kjo*_*kjo 3 scripting bash array wildcards
使用zsh
,根据(可能为空)文件名 glob 的结果创建一个可能为空的数组并不困难。例如:
% pathlist=( /no/such/path/*(N) ); printf -- "%d\n" $#pathlist
0
Run Code Online (Sandbox Code Playgroud)
用bash
,然而,最接近的近似我可以想出上述代码失败时的水珠为空,以产生一个空数组:
% pathlist=( /no/such/path/* ); printf -- "%d\n" ${#pathlist[@]} )
1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该pathlist
变量包含一个条目,即字符串“/no/such/path/*”。
如何修改bash
代码,以便pathlist
为与 glob 匹配的每个文件(如果有)只包含一个条目?
您需要使用 shell 选项 nullglob
#!/bin/bash
shopt -s nullglob
pathlist=( /no/such/path/* ); printf -- "%d\n" "${#pathlist[@]}" )
shopt -u nullglob
Run Code Online (Sandbox Code Playgroud)
Bash 手册对nullglob
shell 选项做了以下说明:
如果设置,Bash 允许不匹配任何文件的文件名模式扩展为空字符串,而不是它们本身。