You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本中使用exiftool变量编写if语句报错问题

问题分析与修复方案

第一个报错的原因与解决

你当前的脚本存在三个核心问题:

  • 变量存储错误:ExifCommand="exiftool ..."只是把命令文本存在变量里,没有执行命令获取版本号,导致if判断时在拿命令本身做匹配,而非实际版本值。
  • 正则语法错误:bash的=~使用标准正则语法,*是量词不能单独作为开头,匹配包含3.7的字符串应该用.*3.7.*。
  • 解释器不兼容:用sh testing.sh运行脚本时,会调用POSIX shell(如dash),而=~是bash专属的正则匹配运算符,POSIX shell不支持该语法。

修复后的脚本(需用bash运行,不要用sh):

#!/bin/bash
# 用命令替换执行exiftool,-s参数让工具只输出版本号值
ExifVersion=$(exiftool -s -ProductVersion /serverdata/serverfiles/test/Server.exe)

# 用bash的[[ ]]做正则匹配,比[ ]更稳定可靠
if [[ $ExifVersion =~ .*3.7.* ]]; then
    echo "testing success"
fi

第二个报错的原因与解决

你用ExifCommand=$(exiftool -ProductVersion ...)时报错Product: not found,是因为exiftool默认输出格式为ProductVersion : 3.7.x,当变量未加引号引用时,shell会把ProductVersion当成独立命令去执行,从而触发错误。

解决方法很简单:给exiftool加上-s参数,让它只输出纯版本号,不再带标签前缀:

ExifVersion=$(exiftool -s -ProductVersion /serverdata/serverfiles/test/Server.exe)

注意事项

运行脚本时,不要用sh testing.sh,直接给脚本添加执行权限后运行./testing.sh,或者用bash testing.sh,这样才能触发脚本开头#!/bin/bash指定的bash解释器。

内容的提问来源于stack exchange,提问作者Stultusaur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:29:54