LINUX.ORG.RU

$ urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
$ x="%d0%9f%d0%a0%d0%98"
$ echo $(urldecode "$x")
ПРИ
kostik87 ★★★★★ ()
Последнее исправление: kostik87 (всего исправлений: 1)

Как-то так

$ sudo apt install gridsite-clients
$ urlencode -d http://help.ubuntu.ru/wiki/%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%B0_unix
http://help.ubuntu.ru/wiki/стандартные_права_unix

Radjah ★★★★★ ()
Последнее исправление: Radjah (всего исправлений: 1)
Ответ на: комментарий от kostik87

А не могли бы вы пояснить конструкцию функции? Любопытно)
Вот двоеточие что значит, например? Также не понял ${*//+/ } и ${_//%/\\x}

Deleted ()
Ответ на: комментарий от Deleted

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

Экое было извращение. Первое выражение у всех аргуентов-строк заменяет плюсики на проблелы, а второе у последнего аргумента заменяет все проценты на \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 ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Всё, разобрался. Bash такой простой и сложный))

Deleted ()
Ответ на: комментарий от Zmicier

Иначе же конфликт может быть.

Угу, впрочем, это тоже не выход, -g перезапишет тогда внешнее (t). Так что если уж извращаться по полной, то:

#!/bin/bash

urldecode2() {
        printf -v $1 "${!1//%/\\x}"
}
urldecode() {
        eval $1=\${!1//+/ }
        urldecode2 $1
}

x="%d0%9f+%d0%98"
urldecode x
echo "$x"

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