我的代码有一个目录路径,例如从源头输入$D_path
。
现在,我需要检查目录路径是否存在,并且在IF条件下是否存在该路径中带有模式(*abcd*
)的文件计数。
我不知道如何通过bash脚本使用这样的复杂表达式。
答案 0 :(得分:2)
仅代码的答案。根据要求提供说明
if [[ -d "$D_path" ]]; then
files=( "$D_path"/*abcd* )
num_files=${#files[@]}
else
num_files=0
fi
我忘记了这一点:默认情况下,如果没有文件与模式匹配,则files
数组将包含一个带有文字字符串*abcd*
的条目。要获得目录存在但没有文件匹配的结果=> num_files == 0,那么我们需要设置一个附加的shell选项:
shopt -s nullglob
这将导致一个模式,该模式不匹配任何文件以扩展为空。默认情况下,不匹配任何文件的模式将作为文字字符串扩展为该模式。
$ cat no_such_file
cat: no_such_file: No such file or directory
$ shopt nullglob
nullglob off
$ files=( *no_such_file* ); echo "${#files[@]}"; declare -p files
1
declare -a files='([0]="*no_such_file*")'
$ shopt -s nullglob
$ files=( *no_such_file* ); echo "${#files[@]}"; declare -p files
0
declare -a files='()'