1 Star 9 Fork 6

bingios / pure-bash-bible-zh_CN

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
百分号编码字符串.md 1.53 KB
一键复制 编辑 原始数据 按行查看 历史
阿笨猫 提交于 2019-08-24 22:07 . first commit

百分号编码字符串

# 百分号编码字符串
urlencode() {
# 用法: urlencode "string"
local LC_ALL=C
for (( i = 0; i < ${#1}; i++ )); do
    : "${1:i:1}"
    case "$_" in
        [a-zA-Z0-9.~_-])
            printf '%s' "$_"
        ;;

        *)
            printf '%%%02X' "'$_"
        ;;
    esac
done
printf '\n'
}

语法说明:

local LC_ALL=C

  • 去除所有本地化的设置,设置语言环境为POSIX【C】,让命令能正确执行;
  • 使用local,就相当于在函数开始的时候定义变量,在函数返回之前做unset,只不过local用起来更简单明了。

${#1}  "${1:i:1}"

  • ${#1}返回第一个参数的长度,即有多少个字符;
  • "${1:i:1}" 每次提取一个字符

%%%02x

  • %%%02x 可以分开为两部分"%%"和"%02X";
  • 两个%%是输出一个'%',这里第一个%是转义符;
  • %02x中的%x是把数字输出为16进制的格式,%02x是保证输出至少占两个字符的位置,如果不够两位的话前面补0

bash中的case语句

case ${VAR} in
pattern1)
    commands1
    ;;
pattern2)
    commands2
    ;;
esac

pattern表示通配符表达式,注意,与正则表达式有区别 比如:通配符如果加上双引号后就不是按通配符处理,而是按文本处理。

其他
1
https://gitee.com/bingios/pure-bash-bible-zh_CN.git
git@gitee.com:bingios/pure-bash-bible-zh_CN.git
bingios
pure-bash-bible-zh_CN
pure-bash-bible-zh_CN
master

搜索帮助