LINUX.ORG.RU

История изменений

Исправление vodz, (текущая версия) :

А не могли бы вы пояснить конструкцию функции? Любопытно)

Экое было извращение. Первое выражение у всех аргуентов-строк заменяет плюсики на проблелы, а второе у последнего аргумента заменяет все проценты на \x, тем самым делая строку для эскейпинга с опцией -e. Менее извратно будет:

urldecode() { : "${1//+/ }"; echo -e "${_//%/\\x}"; }
Но я могу и более извратно, чтобы потом не делать subprocess-ы:
#!/bin/bash

urldecode() {
        local t=${!1}
        t=${t//+/ }
        t=${t//%/\\x}
        printf -v $1 "$t"
}
x="%d0%9f%d0%a0%d0%98"
urldecode x
echo "$x"

Исходная версия vodz, :

А не могли бы вы пояснить конструкцию функции? Любопытно)

Экое было извращение. Первое выражение у всех аргуентов-строк заменяет плюсики на проблелы, а второе у последнего аргумента заменяет все проценты на \x, тем самым делая строку для эскейпинга с опцией -e. Менее извратно будет:

urldecode() { : "${1//+/ }"; echo -e "${1//%/\\x}"; }
Но я могу и более извратно, чтобы потом не делать subprocess-ы:
#!/bin/bash

urldecode() {
        local t=${!1}
        t=${t//+/ }
        t=${t//%/\\x}
        printf -v $1 "$t"
}
x="%d0%9f%d0%a0%d0%98"
urldecode x
echo "$x"