![在 Bash 脚本中使用 urldecode 函数失败:a%xyb 导致 ayb(xy 为数字)](https://linux22.com/image/181829/%E5%9C%A8%20Bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%20urldecode%20%E5%87%BD%E6%95%B0%E5%A4%B1%E8%B4%A5%EF%BC%9Aa%25xyb%20%E5%AF%BC%E8%87%B4%20ayb%EF%BC%88xy%20%E4%B8%BA%E6%95%B0%E5%AD%97%EF%BC%89.png)
deurlname
fromsrenameutils
正确重命名文件,尽管它忽略%xy
文件夹路径。
但到目前为止,我还没有发现可以在 Bash 脚本中处理字符串的函数。
到目前为止我已经尝试过:
1.
shopt -s expand_aliases
alias urldecodePython='python3 -c "import sys, urllib.parse as ul; print(ul.unquote_plus(sys.argv[1]))"'
fnonly=$( urldecodePython "$fnonly" )
urldecode() {
# urldecode <string> , assumes the data contains no backslash.
local url_encoded="${1//+/ }"
printf '%b' "${url_encoded//%/\\x}"
}
fnonly="$(urldecode "$fnonly")"
fnonly=$(echo "$fnonly" | sed -e's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g')
rename 'use URI::Escape; $_ = uri_unescape $_' $fdir/*%*
(在我切换到deurlname
; 之前,不是字符串函数,但遇到了同样的问题。)