bash test regex无法按预期工作

时间:2015-03-08 12:56:40

标签: regex bash file-globs

我有一个bash脚本可以对多个文件进行操作,但操作不应该发生在特定的文件子集上 - 如果文件名匹配 .jpg [例如如在myimage~xa.jpg]。

declare -a AFileList2

for sFile in *.jpg
do
   echo "Testing $sFile"
   if [ -d "$sFile" ]
   then
      echo "skipping directory $sFile"
   else
      if [ -f "$sFile" ]
      then
         if [[ "$sFile" =~ "*~*.*" ]]
         then
            echo "skipping $sFile"
         else
            echo "operating on  $sFile"
            AFileList2+=($sFile)
            ((iFilesFound++))
         fi

      fi
   fi
done
echo "Found by eval: $iFilesFound file(s)"

上面的for循环的关键部分是行

if [[ "$sFile" =~ "*~*.*" ]]

但它不起作用。

我从pdf Advanced bash脚本编制指南中的示例中获得了它,其中演示脚本为:

#!/bin/bash
variable="This is a fine mess."
echo "$variable"
if [[ "$variable" =~ "T*fin*es*" ]]
    # Regex matching with =~ operator within [[ double brackets ]].
then
   echo "match found"
   # match found
fi

但即使这个演示脚本也无法正常工作。

任何帮助apreciated

1 个答案:

答案 0 :(得分:1)

替换它(globbing?)

[[ "$sFile" =~ "*~*.*" ]]

这个正则表达式

[[ "$sFile" =~ .*~.*\..* ]]