在受限制的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!
答案 0 :(得分:3)
我从
获得9分printf "%X" \'$'\t'
引用表达式应该简化代码,不需要:
a=$(<file.txt)
for (( i=0 ; i < ${#a} ; i++ )) ; do
c=${a:$i:1}
printf %02x \'"$c"
done