如何在Bash脚本中用内置命令读取单个字节并正确处理高位字节
读取单个字节并输出字符编码的Shell函数问题
我尝试编写一个Shell函数,从标准输入读取一个字节并打印其字符编码,但使用read命令时,所有大于127的字节都会被解析为\0(空字符)。能否编写一个不调用外部二进制文件的脚本,实现读取单个字节且不遗漏大于127的字节?
我的代码如下:
#!/bin/bash myfunction() { read -rn1 -d '' char || return if [ -z "$char" ]; then # 当"$char"为空或大于127时执行 printf '0' else LC_CTYPE=C printf '%d' "'$char" fi [ -t 1 ] && echo }
预期执行结果:
$ printf '\x05\x00\x80\x00\x32' | (while myfunction; do :; done) 5 0 128 0 50
实际执行结果:
$ printf '\x05\x00\x80\x00\x32' | (while myfunction; do :; done) 5 0 0 0 50
我哪里出错了?
我还尝试过read -rN1 char,它会跳过空字符,且-d ''参数会被忽略,执行结果如下:
$ printf '\x05\x00\x80\x00\x32' | (while myfunction; do :; done) 5 128 50
编辑:在read命令前添加LC_CTYPE=C参数后问题解决,感谢帮助。
内容的提问来源于stack exchange,提问作者user21988436
相关产品推荐
相关产品推荐

