Я создал преобразователь hex в ASCII для строк в bash. Приложение, в котором я нахожусь, меняет символы (что угодно, кроме [0-9], [A-Z], [a-z]) в строке на соответствующий ей шестнадцатеричный%. Например: / изменяется на% 2F в строке
Я хочу сохранить символы ASCII как есть. Ниже мой код:
NAME=%2fhome%40%21%23
C_NAME=""
for (( i=0; i<${#NAME}; i++ )); do
CHK=$(echo "{NAME:$i:1}" | grep -v "\%" &> /dev/null;echo $?)
if [[ ${CHK} -eq 0 ]]; then
C_NAME=`echo "$C_NAME${NAME:$i:1}"`
else
HEX=`echo "${NAME:$i:3}" | sed "s/%//"`
C_NAME=`echo -n "$C_NAME";printf "\x$HEX"`
continue 2
fi
done
echo "$C_NAME"
ВЫВОД:
/2fhome@40!21#23
ОЖИДАЕТСЯ:
/home@!#
Так что в основном конверсия происходит, но не на месте. Он также сохраняет шестнадцатеричные значения, что говорит мне, что оператор continue 2
, вероятно, не работает, как я ожидаю в моем коде. Любые обходные пути, пожалуйста.