You need to enable JavaScript to run this app. 如何解决fnm版本更新shell脚本出现的(standard_in) 1: syntax error错误
优惠活动
大模型
产品
解决方案
定价
更多

如何解决fnm版本更新shell脚本出现的(standard_in) 1: syntax error错误

问题解决方法

报错根因

  • 你测试用的$insane变量值为1.0.0,包含2个小数点,而bc命令仅支持识别单小数点的数值格式,传入多小数点的字符串会直接触发语法解析错误。
  • 额外风险:即便格式统一为x.y单小数点格式,用bc做版本号比较也存在逻辑漏洞:例如版本1.10和1.2,bc会判定1.10 < 1.2,但实际版本规则中1.10是更新的版本,会导致更新逻辑错误。

修复方案

  1. 统一版本号格式:测试用的insane变量要和生产环境使用的installedVersion格式保持一致,仅保留「主版本号.次版本号」两段,单小数点,例如测试时设置为insane="1.0"。
  2. 替换版本比较逻辑:使用专门支持版本号排序的sort -V命令替代bc,完全兼容版本号比较规则,不会出现格式错误和逻辑漏洞。

修复后的完整代码

#!/bin/bash

# 补全原代码缺失的缩进变量
spacing="  "
N=""

# 获取最新版本,仅保留主版本+次版本,同时清理多余引号和空格
latestVersion=$(curl -s https://api.github.com/repos/Schniz/fnm/releases/latest | grep tag_name | cut -d ":" -f2 | cut -d "," -f1 | cut -d "v" -f2 | cut -d "." -f1,2 | tr -d '"' | xargs)

# 获取已安装版本,仅保留主版本+次版本
installedVersion=$(fnm -V | cut -d " " -f2 | cut -d "." -f1,2)
# 测试用变量,格式和installedVersion统一,生产环境直接替换为installedVersion即可
insane="1.0"

# 提示信息定义
upToDateMessage="${spacing} Your fnm version is up to date."
outdatedMessage="${spacing} Your fnm version is outdated! The currently installed version is $installedVersion while the latest version is $latestVersion. Do you wish to update fnm (y/n): "

echo -e "${spacing} Checking for updates...\n"

# 版本比较逻辑,使用sort -V专门处理版本号规则
if [[ "$(printf '%s\n' "$latestVersion" "$insane" | sort -V | head -n1)" == "$latestVersion" ]]; then
   echo -e "$upToDateMessage"
else
   read -rp "$outdatedMessage" user_input
   # 转小写兼容大写Y/N输入
   user_input=${user_input,,}
   if [[ "$user_input" == "y" ]]; then
       echo -e "${spacing} Updating fnm..."
       # 移除多余的$()包裹,避免把执行输出当成命令运行
       curl -fsSL https://fnm.vercel.app/install | bash
   elif [[ "$user_input" == "n" ]]; then
       echo -e "${spacing} Thanks for using this script."
       exit 0
   else
       echo -e "${spacing} Invalid input! Please answer in y or n."
       exit 1
   fi
fi

额外优化说明

  • 版本号取值后增加了tr -d '"'和xargs处理,避免取到的版本号带引号或空格导致比较错误
  • 修复了curl安装命令多余的$()包裹问题,避免执行异常
  • 增加了用户输入转小写逻辑,兼容大写Y/N的输入
  • 补全了原代码缺失的spacing变量定义,避免空变量报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 08:06:05