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

Bash遍历文件字符生成SVG标签报错,求解决方法

问题解决:Bash遍历字符替换并修复文件读取错误

核心错误分析

  1. 错误的文件读取逻辑:代码中done < "$new"是致命问题——$new是从文件中读取的单个字符(如F、#),却被当作文件名尝试打开,这就是报错“找不到文件”的直接原因。
  2. 语法错误:
    • [[ ]]中比较运算符==两侧必须加空格,原代码$new==&quot;#&quot;不符合Bash语法规范
    • 匹配大写字母需用正则匹配符=~,而非==,且要锚定首尾确保只匹配单个大写字母
    • echo输出的HTML字符串存在双引号嵌套问题,导致语法混乱

修正后的代码

#!/bin/bash
# 替换为你的目标文件路径
words="target_file.txt"
# 读取文件内容到变量
foo=$(cat "$words")

# 遍历每个字符
for (( i=0; i<${#foo}; i++ )); do
    new=${foo:$i:1}
    if [[ $new == "#" ]]; then
        echo ' <rect x="20" y="20" fill="black" />'
    elif [[ $new =~ ^[A-Z]$ ]]; then
        echo ' <rect x="20" y="20" fill="white" />'
    else
        # 处理换行符,输出空行
        echo
    fi
done

代码说明

  • 用$(cat "$words")替代反引号,语法更规范且避免转义冲突
  • 移除了完全多余的while read循环,直接对单个字符进行判断处理
  • 修正[[ ]]内的比较逻辑,正则匹配大写字母时用^[A-Z]$确保只匹配单个大写英文字符
  • 用单引号包裹输出的HTML字符串,彻底避免双引号嵌套导致的语法错误
  • 增加else分支处理换行符,输出空行以匹配预期格式

测试验证

当目标文件内容为:

FG#
Z#E

运行代码后将输出:

<rect x="20" y="20" fill="white" />
 <rect x="20" y="20" fill="white" />
 <rect x="20" y="20" fill="black" />

 <rect x="20" y="20" fill="white" />
 <rect x="20" y="20" fill="black" />
 <rect x="20" y="20" fill="white" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:40:45