使用 shell 脚本将文件中的十六进制字符转换为 ASCII

convert hex characters in a file to ASCII using a shell script

我有一个文件 values,其中包含一串十六进制字符。

\x41\x42\x43\x44\x45

我可以使用例如 printf:

将其编码为二进制值

printf $(cat values)------------输出-------->ABCDE

这在终端上完美运行,但在脚本中不起作用:

#!/bin/sh
printf $(cat values)

结果:

$ ./script.sh
\x41\x42\x43\x44\x45

我想知道为什么它不起作用以及如何解决它。

它不起作用,因为 bash 中使用的 printf 与 sh 中使用的不同。要快速修复,只需将 #!/bin/sh 替换为 #!/bin/bash。只要您不关心完全遵守 /bin/sh,这可能是一个简单的解决方案。

然而,如果你真的想使用 sh 解释器,那么使用像这样的东西:

/bin/echo -e "\x40"

您是否尝试过使用 #!/bin/bash 而不是 #!/bin/sh?我无法从你的问题中看出,但似乎你不需要使用 sh 而不是 bash.