在 Bash 中测试正则表达式的文件名

在 Bash 中测试正则表达式的文件名

我不确定代码应该如何编写,但我想测试文件/文件夹的命名模式,例如:

如果 [ -d $i ] && [ 正则表达式([0-9].,$i) {
       做一点事
    }

我希望它检查文件/文件夹是否是目录,并且它的名称是数字(即 1 或 101 或 10007)...

答案1

[不能使用正则表达式。但是[[可以:

if [[ -d $i -a $i =~ ^[0-9]+$ ]] ; then
  ...
fi

答案2

如果您使用的是 Bash 3.2 之前的版本,则正则表达式匹配运算符=~要么不存在,要么工作方式不同,要么有错误。在这种情况下,您可以使用此 glob 扩展形式(或者如果您使用的 POSIX shell 没有它)。

case $i in
    *[^0-9]*)
        do_not_a_number_stuff
        ;;
     *)
        if [ -d "$i" ]
        then
            do_something
        fi
        ;;
 esac 

相关内容