Bash遍历文件字符生成SVG标签报错,求解决方法
问题解决:Bash遍历字符替换并修复文件读取错误
核心错误分析
- 错误的文件读取逻辑:代码中
done < "$new"是致命问题——$new是从文件中读取的单个字符(如F、#),却被当作文件名尝试打开,这就是报错“找不到文件”的直接原因。 - 语法错误:
[[ ]]中比较运算符==两侧必须加空格,原代码$new=="#"不符合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
相关产品推荐
相关产品推荐

