我是使用Ubuntu18.04进行Bash脚本编写的新手,它试图查找文件是否具有扩展名(任何扩展名),但我尝试实现的正则表达式无法正常工作。我一直在Perl脚本中使用相同的正则表达式,并且工作正常。但是它在Bash脚本中不起作用。以下是我的Bash代码:
dir="ImageFolder"
fileName=""
for f in "$dir"/*;
do
fileName="$(basename "$f")"
if [[ $fileName =~ /(.*)?\.(.*)/ ]]
then
echo $fileName
echo "Yes it has extension"
fi
done
即使“ ImageFolder”中的文件具有扩展名,它也不会执行这些echo命令。换句话说,“ if”语句未执行。仅当我通过在'!'
之前放置符号来反转条件时,它才会执行'$fileName'
。当我反转条件时:if [[ ! $fileName =~ /(.*)?\.(.*)/ ]]
然后执行,但给出了不希望的输出(请参见图片):它显示带有扩展名的文件,并说是的,具有扩展名
但是,当我实际上通过物理地移入文件夹来删除文件扩展名时,它再次执行并说文件扩展名存在(请参阅图片)说“是的,即使我已经删除了扩展名,也有扩展名”
我真的需要这个正则表达式来工作。一些帮助将不胜感激。
一旦删除了正则表达式模式周围的“ /”,它就应该起作用。
[[ $fileName =~ (.*)?\.(.*) ]]
参考 有关更多示例,请https://www.tldp.org/LDP/abs/html/bashver3.html#REGEXMATCHREF。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句