Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash中的这个条件语句有什么问题?_Bash_Shell_Validation - Fatal编程技术网

bash中的这个条件语句有什么问题?

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 该错误是条件表达式中的语法错误:意外标记 我想我可能忽略了一些简单的事情。我在谷歌上搜索了不少,但找不到

我正在检查:

如果$file是二进制文件,而$file不是图像文件,则执行某些操作

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)$
更容易阅读(和等效)。请参阅:小心双负片。您测试的是
不是图像
,因此当测试成功时,请在打印
之前使用
&&
(不是
|