How to decode URL-encoded string in shell?

$ function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }

Usage:

urldecode https%3A%2F%2Fgoogle.com%2Fsearch%3Fq%3Durldecode%2Bbash
https://google.com/search?q=urldecode+bash