It’s all about shell script.
每次写到 shell, 都会要去翻手册, 自己也写一遍希望是能够加深记忆吧.

shell variable

format usage example
${var} / $var 前者更可读 -
${井var} 返回 ${var} 字符串长度 var="abc";echo ${井var} -> 3
${var:start} 截取字符串 var=abc;echo ${var:1} -> bc
${var:start:len} 截取字符串 var=abc;echo ${var:1:1} -> b
${var#str} 删除 var 从左 尽量短 地匹配 str 后的字符串 bc";echo ${var#*b}; -> bbc
${var##str} 删除 var 从左 尽量长 地匹配 str 后的字符串 bc";echo ${var#*b}; -> c
${var%str} 从右… 尽量短
${var%%str} 从右… 尽量长
${var:-str} 如果 var 为空或未定义, 则返回 str
${var:=str} 如果 var 为空或未定义, 则返回 str 并将 str 赋值给 var
${var:+str}
${var:?str}
${var/substring/newstring} 返回 var 中第一个 substring 被替换成 g 的结果 var='abbc';echo ${var/b/HH} -> aHHbc
${var//substring/newstring} 返回 var 中所有 substring 被替换成 g 的结果 var='abbc';echo ${var//b/HH} -> aHHHHc
$(command) 相当于 command $(date)
$((算术表达式)) 计算 echo $((1+1)) -> 2

special variable

name usage
$0 current script name / function name
$num 某个位置的参数
$# 传入参数的个数
$* 所有参数(作为一个参数)
$@ 所有参数(作为一个个独立参数)
$? 上一条命令的执行结果
$$ current script execute pid
$! 后台运行的最后一个进程的 pid (Expands to the process ID of the most recently executed background (asynchronous) command.)
$- 当前 shell 使用的参数 (???)
$_ 之前命令的最后一个参数

about tricks

Control-C

Control-C is a common computer command., Control-C -> echo $? -> 1

discovery

发现以下的 TODO 我想要学的, 在 man bash 中都有

TODO

  • about if-else
  • about for-in
  • about while-break
  • about [[]]
  • about rawinput
  • about array
  • about tricks

references

  1. man bash
  2. shell 变量详解