bash
Bash 是最好的语言(确信)
变量魔法#
str="HelloWorld"
> echo ${str:2:4} # 变量切分,从 2 开始,切 4 个字符
lloW
> echo ${#str} # 获取变量长度
10
echo ${str/[eo]/X} # 正则替换,只替换一次
HXlloWorld
> echo ${str//[eo]/X} # 双斜杠,替换所有
HXllXWXrld
user="${1:-nick}" # 假如 $1 是空的,就赋值为 nick
统计字数#
some work | wc -m # -m 是统计字符数,默认为字节数,可以 man 或者 -<TAB> 查看所有选项
脚本之间参数的传递#
#/usr/bin/bash
echo "\$@ (无括号)每个参数按照 IFS 拆分:"
for arg in $@; do echo "[$arg]"; done
echo
echo "\"\$@\" (有括号)每个参数作为独立元素传递:"
for arg in "$@"; do echo "[$arg]"; done
echo
echo "\$* (无括号)和 \$@ 一样:"
for arg in $*; do echo "[$arg]"; done
echo
echo "\"\$*\" (有括号)所有参数都当作一个整体:"
for arg in "$*"; do echo "[$arg]"; done
结果:
> ./1.sh "Hello World" --check
$@ (无括号)每个参数按照 IFS 拆分:
[Hello]
[World]
[--check]
"$@" (有括号)每个参数作为独立元素传递:
[Hello World]
[--check]
$* (无括号)和 $@ 一样:
[Hello]
[World]
[--check]
"$*" (有括号)所有参数都当作一个整体:
[Hello World --check]
信号处理#
trap '命令' 信号名
错误就退出#
set -e
重扫PATH(zsh 特有)#
rehash
进程替代 >() <()#
>() 是输出到一个 fd 中,例如:
> echo hi | tee >(cat) >(cat) >/dev/null
hi
hi
> echo hi > >(cat) > >(cat)
hi
hi