【发布时间】:2020-04-25 02:09:20
【问题描述】:
我是使用 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”中的文件具有扩展名,它也不会执行这些回显命令。换句话说,“if”语句没有执行。只有当我通过在'$fileName' 之前放置'!' 符号来反转条件时才会执行它。
当我反转条件时:if [[ ! $fileName =~ /(.*)?\.(.*)/ ]] 然后它执行但给出了不希望的输出(请参见图片):
It displays files with extension and says yes it has extension
但是,当我通过物理进入文件夹实际删除文件扩展名时,它再次执行并说文件扩展名存在(请参见图片) Says 'Yes It has extensions even though I've removed them'
我真的需要这个正则表达式才能工作。一些帮助将不胜感激。
【问题讨论】:
-
一个非常简单的解决方案(虽然没有很多误报)是
[[ $filename = *.* ]],使用模式匹配而不是正则表达式。 -
(对不起,我的意思是说 with 误报,例如
.bashrc和foo.。)
标签: linux bash shell sh ubuntu-18.04