【发布时间】:2017-10-26 13:27:38
【问题描述】:
在受限 shell 中,我只能执行 printf(没有 awk、hexdump、xxd、...),所以我使用此脚本将文件打印为 hex:
a=$(<file.txt)
for ((i=0;i<${#a};i++));
do c=${a:$i:1};
if [[ $c == ' ' ]]; then printf "%X" \'\ \';
elif [[ $c == $'\r' ]]; then printf "%X" \'\r\';
elif [[ $c == $'\t' ]]; then printf "%X" \'\t\';
elif [[ $c == $'\n' ]]; then printf "%X" \'\n\';
else printf %02x \'${a:$i:1};
fi;
done
问题: 最后一行 (printf %02x \'${a:$i:1}) 不适用于某些字符,如 \s,\r,\n,\t,... 我用 (printf "%X" \'\ \') 处理空格字符,但不适用于 \r、\t 和 \n
printf "%X" \'\t\' ---> 74
printf "%X" "'\t" ---> 5C
printf "%X" \'$"\t"---> 5C
但它应该返回 09!
【问题讨论】:
-
请检查我的回复的更新。