Вы, вероятно, знаете удар встроенный 'expr' как в
$ expr 60 / 5
12
который ограничен целыми числами и нуждается в пробелах между аргументами.
Что мешает Вам определять функцию вроде выражения эха, которое Вы уже используете? Т.е.
divide () {
echo $1/$2 | bc
}
С ударом, zsh, эхом GNU или некоторыми реализациями ksh в некоторых системах, это может декодироваться просто echo -e
после замены всех %
с \x
.
url_encoded_string="%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B"
temp_string=${url_encoded_string//%/\\x}
printf '%s\n' "$temp_string"
# output: \xD1\x80\xD0\xB5\xD1\x81\xD1\x83\xD1\x80\xD1\x81\xD1\x8B
echo -e "$temp_string"
# output: ресурсы
(Это предполагает, что сама строка не содержит символы обратной косой черты и не является одной из опций, поддерживаемых Вашим echo
команда)
Как @JoshLee также указывает, "протеста эха" можно избежать путем прямого использования:
printf ${url_encoded_string//%/\\x}
вместо этого непосредственно позади первой команды.
С жемчугом:
perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei'
Или с URI::Escape
:
perl -MURI::Escape -pe '$_=uri_unescape$_'
Существует названная программа convmv
который может помочь Вам.
Просто используйте convmv --unescape /some_path/target_file
. Это сделает пробный прогон.
После того как Вы подтвердили, использовать convmv --notest --unescape /some_path/target_file
продолжаться.
Домашняя страница этой программы: http://j3e.de/linux/convmv/