LINUX.ORG.RU

Можно ли средствами шелла...


0

0

Заменить специальные символы и не ascii символы в строке на
последовательности '%xx'. Как это сделать, например, на pythone я знаю,
но хотелось бы обойтись только шеллом. Кажется это можно с помошью tr
реализовать, но хотелось бы увидеть пример...

anonymous

Ответ на: комментарий от Rock

Спасибо Rock, сегодня ночью наваял такую функцию для реализации quote'инга:

quote ()
{
local pre_str ret_str

pre_str=${!1}
pre_len=${#pre_str}
ret_str=

for(( i=0; i < pre_len; i++ ))
do
ch=${pre_str:i:1}
if expr "$ch" : '.*\([-_\./:0-9A-Za-z]\)' >/dev/null
then
ret_str="${ret_str}""${ch}"
else
ret_str="${ret_str}%"`echo -n "$ch" | od -A n -t x1 | tr -d '\040'`
fi
done

eval "$1"=\'"${ret_str}"\'
}

Может конечно криво, но это я попытался разобаться с программированием
на баше. При написании я смотрел на abs-guide-2.1 из тамошних примеров
многое и взял. Может кто подскажет что можно бы решить лучше. Ну к
примеру вот здесь '| tr -d '\040'' я удаляю пробел в начале строки которую выдает od, может это как то еще можно решить, или перебор всех
символов в строке можно организовать иначе?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.