如何在Shell变量中使用ANSI-C引用?BusyBox Sed十六进制替换问题
BusyBox sed中结合Shell变量实现十六进制替换的问题与解决
问题场景
在BusyBox v1.32.1(2022-03-05 22:56:19 CET)多调用二进制环境中执行sed十六进制替换时,遇到如下情况:
- 常规Linux环境下正常运行的命令,在BusyBox sed中无效:
HEXCODE=34 sed "s/\xa1\xb2/\x12\x$HEXCODE/g" < file.bin > file2.bin
- 使用硬编码ANSI转义序列的命令可正常执行:
sed $'s/\xa1\xb2/\x12\x34/g' < file.bin > file2.bin
- 尝试结合Shell变量
HEXCODE使用ANSI转义格式时,命令无法生效:
HEXCODE=34 sed $'s/\xa1\xb2/\x12\x$HEXCODE/g' < file.bin > file2.bin
解决方案
通过eval命令实现变量替换与ANSI转义序列的解析,以下命令可正常工作:
HEXCODE=34 eval sed "\$'s/\xa1\xb2/\x12\x$HEXCODE/g'" < file.bin > file2.bin
内容的提问来源于stack exchange,提问作者mncache
相关产品推荐
相关产品推荐

