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

KSH脚本字符串转秒函数异常:配置文件取值解析失败

问题原因及解决方案

核心原因:配置文件存在隐藏的回车符(\r)

你的value变量视觉上显示为200s,但实际可能带有Windows格式的换行符——回车符(\r)。这类字符在终端输出时不会直接显现(echo "|${value}|"执行时,\r会让光标回到行首,覆盖左侧的|,导致你看到的结果看似正常),但会干扰函数内的字符匹配逻辑:

  • 直接传200s时,参数是纯Unix格式字符串,函数能正确拆分数字和时间单位;
  • 传递带\r的200s\r时,函数的匹配规则(比如提取末尾字母的正则)会因为\r的存在无法识别单位字符,最终导致numeral拿到整个带隐藏字符的字符串(视觉上显示为200s)、timeselector为空。

解决方法

方法1:提取值时清理控制字符

在获取value的命令后追加tr命令,删除回车符及其他不可见控制字符:

value=$(echo $line | cut -d '=' -f 2 | tr -d '\r[:cntrl:]')

方法2:在函数内部处理输入

修改convert_string_to_seconds函数,先对输入做清理:

convert_string_to_seconds() {
    local input=$(echo "$1" | tr -d '\r[:cntrl:]')
    # 保留原解析逻辑
    numeral=$(echo "$input" | sed 's/[^0-9]//g')
    timeselector=$(echo "$input" | sed 's/[0-9]//g')
    # ... 后续计算代码
}

方法3:转换配置文件格式

如果配置文件是Windows环境编辑的,用dos2unix工具将其转为Unix格式:

dos2unix your_config_file.conf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:26:01