使用 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.
我有一个文件 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.