Answers:
是的,运行以下命令:
shopt -s nullglob
它将使匹配无效,并且不会触发任何错误。
~/.bashrc如果要在POSIX shell中检测到空的glob,请尝试
for i in *.txt; do
[ "$i" = '*.txt' ] && [ ! -e '*.txt' ] && continue
donebreak而不是,可能会导致更严重的后果continue)。
在bash中,shopt -s nullglob如果没有匹配项,则可以用于扩展为空数组。
在没有的POSIX Shell中nullglob,可以通过[ -e "$file" ] || [ -L "$file" ] || continue将for循环的第一部分作为检查对象来检查是否确实存在要传递的文件名,从而避免此问题。
[ -e对于无法访问的文件或作为不可访问或不存在的文件的符号链接的文件将返回false。
chmod 0 the_file,[ -e the_file ]还是判断为真,所以它必须是别的东西。
mkdir -p x/{a,b} && chmod 444 x && echo x/* && [ -e x/a ]。x / a无法访问,但由于x是可读的,x / *将扩展。
对于没有nullglob选项的外壳,通常的技术是
set -- [*].type *.type
case $1$2 in
'[*].type*.type') shift 2;;
*) shift
esac
for file do
cmd -- "$file"
done
多余的[*].type是覆盖*.type当前目录中有一个文件的情况。
现在,如果要包括点文件,则变得更加复杂。
我相信这项技术是Laura Fairhead几年前在Usenet上提出的。
*.txt。值得检查文件是否存在。