bash中的这个条件语句有什么问题?
我正在检查: 如果$file是二进制文件,而$file不是图像文件,则执行某些操作bash中的这个条件语句有什么问题?,bash,shell,validation,Bash,Shell,Validation,我正在检查: 如果$file是二进制文件,而$file不是图像文件,则执行某些操作 if [[ "$(file --dereference --mime "$FILE")" =~ binary ]] && [[ "$FILE" != \.jpg$|\.jpeg$|\.png$ ]]; then echo "$1 is a binary file" exit 0 fi 该错误是条件表达式中的语法错误:意外标记 我想我可能忽略了一些简单的事情。我在谷歌上搜索了不少,但找不到
if [[ "$(file --dereference --mime "$FILE")" =~ binary ]] && [[ "$FILE" != \.jpg$|\.jpeg$|\.png$ ]]; then
echo "$1 is a binary file"
exit 0
fi
该错误是条件表达式中的语法错误:意外标记
我想我可能忽略了一些简单的事情。我在谷歌上搜索了不少,但找不到有效的声明。非常感谢任何提示。您似乎试图在第二个
[[[
上进行否定匹配。您可以通过将!
放在匹配前=~
以下是一个可能对您有所帮助的示例:
[[ ! 'foo.png' =~ \.(jpe?g|png)$ ]] && echo not a image
!=
是一个简单的(/glob模式)字符串比较,而不是正则表达式比较。不幸的是,=~
没有否定形式,但您可以始终使用[!“$FILE”=~.
顺便说一句,我发现正则表达式模式\.(jpg;jpeg;png)$
更容易阅读(和等效)。请参阅:小心双负片。您测试的是不是图像
,因此当测试成功时,请在打印之前使用&&
(不是|
)