shell 脚本里更好命令行参数
Shell 脚本命令行参数解析:getopts 使用指南与最佳实践
# 去前面空格 var="${var#"${var%%[![:space:]]*}"}" # 去后面空格 var="${var%"${var##*[![:space:]]}"}" # 去掉首尾空白 trim_string() { # Usage: trim_string " example string " : "${1#"${1%%[![:space:]]*}"}" : "${_%"${_##*[![:space:]]}"}" printf '%s\n' "$_" } $ trim_string " Hello, World " Hello, World # 整理参数 $ echo " aa bb " | xargs aa bb # 去掉所有空格 $ echo " a b c " | tr -d '[:space:]' abc$ # 去掉前面的空格 $ echo " a b c " | sed -e 's/^[[:space:]]*//' # 去掉后面的空格 $ echo " a b c " | sed -e 's/[[:space:]]*$//' # 去掉前后空格 echo " a b c " | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
echo "Upper to Lower" | tr '[:upper:]' '[:lower:]' # bash 4.0+ to lower echo "${a,,}" # bash 4.0+ to upper echo "${a^^}" # reverse case echo "${a~~}"
if [[ $var == *sub_string* ]]; then printf '%s\n' "sub_string is in var." fi # Inverse (substring not in string). if [[ $var != *sub_string* ]]; then printf '%s\n' "sub_string is not in var." fi # This works for arrays too! if [[ ${arr[*]} == *sub_string* ]]; then printf '%s\n' "sub_string is in array." fi # start with sub-string: *sub_string # end with sub-string: sub_string* # using a case statement case "$var" *sub_string*) # Do ;; *) # Else esac
# 设置变量 (gdb) set var i = 10 # 设置地址为值 (gdb) set set {int}0x1236252 = 10 # 设置寄存器 set var $eax = 10
# 打印 char str1[] = "abcd"; (gdb) x/s str1 # 打印 wchar_t str2[] = L"abcd"; (gdb) x/ws str2 # 设置字符串, 也可以通过 set{char [n]} 0xxxxx = "ABCD" (gdb) set main::str1 = "ABCD";
# 正则搜索函数 (gdb) info functions pre[a-z]* # 退出函数 (gdb) fin # 执行函数 call func() print func() # 显示函数栈 (gdb) i frame # 显示寄存器 (gdb) i registers # 尾调用栈信息 (gdb) set debug entry-values 1 (gdb) i frame
# 匿名空间设置断点 (gdb) b (anonymous namespace)::func # 地址上打断点 (gdb) b *0x22222 # 文件行号上打断点 (gdb) b file.c:17 # 保存/恢复断点 (gdb) save breakpoints file-name-to-save (gdb) source file-name-to-save (gdb) info breakpoints # 临时,一次性断点 tbreak (gdb) tb xxx.c:12 # 条件断点 (gdb) b xxx.c:10 if i==10 # 忽略断点 1 一共 10 次 (gdb) ignore 1 10
# 设置观察点,变量变化时停下来 (gdb) watch var1 (gdb) watch *(int*)0x33333 # 令观察点只对特定线程生效 (gdb) wa var1 thread 3 # 读观察点,读取变量时生效 (gdb) rwatch var1 # 读写观察点 (gdb) awatch var1
# 16 进制打印 10个字节 (gdb) x/10xb a # 10 进制打印 (gdb) x/20ub a # 2 进制打印 (gdb) x/16tb a
By Liao Tonglang.
把当前热点继续串成多页阅读,而不是停在单篇消费。
Shell 脚本命令行参数解析:getopts 使用指南与最佳实践
汇总本站 Linux 内核工程相关文章,覆盖 eBPF、bpftrace、Cilium、io_uring 协同以及内存分配器实践。
一篇写给中国工程团队的开源世界地图:从 1983 年 Richard Stallman 发起 GNU 项目、1998 年 OSI 成立、2018 年 MongoDB 更改 SSPL,到 2020 年开放原子开源基金会成立、再到 2024 年大模型时代的 OpenRAIL 与 LLaMA 许可,把四十年的关键事件、基金会、协议演进和中国线索串成一张可直接指导选型的全景图。
深入解析 GPLv2 到 GPLv3 的条款变化、Tivoization 反规避与 DRM 条款、专利终止条款;LGPL 链接例外的工程边界;以及 Linus Torvalds 拒绝升级到 v3 的真实原因与嵌入式生态影响。包含路由器厂商、国内 Android 设备的 GPL 合规真实案例。