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

Bash脚本校验特定格式字符串失效,请求修正

修正后的Bash校验脚本

先给出可正确运行的校验脚本:

#!/bin/bash
exp_len=10
file="a.txt"
msg="checking string"
tmp="File not exist"

echo "$msg"
if [ -f "$file" ]; then
    # 读取文件内容并去除换行符,避免末尾换行干扰长度判断
    tmp=$(tr -d '\n' < "$file")
    if [[ ${#tmp} -ne $exp_len ]]; then
        msg="invalid length"
    elif [[ $tmp =~ ^A[0-9]{3}-B[0-9]{4}$ ]]; then
        msg="valid"
    else
        msg="invalid"
    fi
else
    msg="file not exist"
fi
echo "$msg"

原脚本的错误点说明

  • 语法空格缺失:Bash中if与[/[[之间、]/]]与前面表达式之间必须保留空格,原脚本if[ -f $file];、if[[${#tmp} != $exp_len ]];等写法会直接触发语法错误。
  • 正则表达式错误:原正则^[A[0-9]{3}-B[0-9]{4}]$错误地用外层方括号把规则包裹成了字符集,正确规则应为^A[0-9]{3}-B[0-9]{4}$,直接匹配"A+3位数字- B+4位数字"的完整格式。
  • 未处理文件换行符:cat $file会保留文件末尾的换行符,导致实际长度多1位,用tr -d '\n'可去除所有换行,确保长度判断准确。
  • 变量引用不规范:$file、$tmp等变量未加双引号,若文件名或内容包含空格会出现异常,包裹双引号可避免此类问题。
  • 长度判断运算符不严谨:长度是数值类型,在[[ ]]中用-ne(数值不等)比!=更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:06:25