【发布时间】:2019-02-06 21:52:23
【问题描述】:
我的代码有一个目录路径传入,例如来自源的$D_path。
现在我需要检查目录路径是否存在,以及该路径中具有模式 (*abcd*) 的文件的数量是否存在于 IF 条件中。
我不知道如何通过 bash Scripting 使用如此复杂的表达式。
【问题讨论】:
-
请考虑在您的问题中添加更多信息,以及您解决问题的努力,我们将很乐意为您提供帮助
我的代码有一个目录路径传入,例如来自源的$D_path。
现在我需要检查目录路径是否存在,以及该路径中具有模式 (*abcd*) 的文件的数量是否存在于 IF 条件中。
我不知道如何通过 bash Scripting 使用如此复杂的表达式。
【问题讨论】:
只有代码的答案。可根据要求提供说明
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='()'
【讨论】: