无法找到正确的 bash 语法来比较数字

问题描述 投票:0回答:1

长脚本的一部分,我只是想比较两个数字,一个是常数,另一个是通过

ffprobe
检索的(错误消息中的474是ffprobe找到的高度)

CURRENT_RES=$(ffprobe -v quiet -select_streams v:0 -show_entries stream=height -of csv=s=x:p=0 "${fn}")
  if [[ $CURRENT_RES -gt 1080 ]]; then
    echo "leaving preset normal"
    SLOW_PRESET=("" "")
  else
    echo "setting preset to slow"
    SLOW_PRESET=(-preset slow)
  fi;

产生:

/usr/local/bin/startScreen.sh: line 95: [[: 474

474: syntax error in expression (error token is "474")
setting preset to slow

我还尝试了算术运算符,例如:

  if (($CURRENT_RES>1080)); then
    echo "leaving preset normal"
    SLOW_PRESET=("" "")
  else
    echo "setting preset to slow"
    SLOW_PRESET=(-preset slow)
  fi;

得到了略有不同,但本质上相同的错误消息,例如:

/usr/local/bin/startScreen.sh: line 95: ((: 474

474>1080: syntax error in expression (error token is "474>1080")
setting preset to slow

更令人困惑的是,在该块下面的 15 行中,还有另一个比较,效果非常好!

if [[ $CURRENT_RES -gt $CONVERT_HEIGHT ]]; then

我认为可能是内联写入的 1080 数字混淆了 if 表达式,所以我尝试将 1080 分配给变量并重用它,但这没有改变任何东西。

bash ffmpeg
1个回答
0
投票

尝试像这样修改你的脚本:

CURRENT_RES=$(ffprobe -v quiet -select_streams v:0 -show_entries stream=height -of csv=s=x:p=0 "${fn}" | tr -d '[:space:]')

if [[ "$CURRENT_RES" -gt 1080 ]]; then   echo "leaving preset normal"  SLOW_PRESET=("" "") else   echo "setting preset to slow"   SLOW_PRESET=(-preset slow) fi

tr -d '[:space:]'
从 ffprobe 的输出中删除所有空格或换行符。现在
CURRENT_RES
应该可以干净地进行比较,解决您遇到的语法错误。

© www.soinside.com 2019 - 2024. All rights reserved.