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

Shell脚本中如何在sed内使用变量?alphametic脚本sed命令报错求解

问题原因

你脚本最后一行sed命令报错的核心原因是:双引号包裹的sed表达式会优先被shell做转义解析,正则分组用的\(、\)和反向引用用的\1里的反斜杠会被shell直接过滤,sed最终拿到的规则不符合正则语法,无法正常匹配替换。

另外你代码里sort -n是按数字排序,而你需要的是字母字典序排序,去掉-n参数才能得到正确的字母顺序。

修复方案

方法1:给双引号内的反斜杠加双层转义

将最后一行修改为:

sed "s|^\\(.*\\)$|\\1 -> ${1}|" testing2

双反斜杠在shell解析后会传递给sed一个单反斜杠,保证正则规则正常生效。

方法2(更稳妥):单双引号拼接sed表达式

单引号内的内容不会被shell转义,只把变量部分用双引号包裹即可:

sed 's|^\(.*\)$|\1 -> '"${1}"'|' testing2

优化后的完整脚本(无需临时文件)

你可以用管道直接串起所有逻辑,不用生成中间临时文件,兼容性更好:

#!/bin/bash
echo "$2 $3 $4 $5" | tr -d ' ' | fold -w1 | sort | uniq -i | paste -sd '' | sed 's|^\(.*\)$|\1 -> '"${1}"'|'

测试调用./alphametic 5790813 BEAR RARE ERE RHYME即可直接输出期望结果:ABEHMRY -> 5790813

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:54:02