Shell没有range函数,可以使用 {1..999} 的形式,或seq命令。seq的选项不多,但是设计的非常精致和强大,man seq查看手册,1分钟内可以掌握它。
find xxx -print0 xargs -0 或 xargs --null 如果你被find和xargs坑过,-print0和--null你定会让你感到亲切的。
read -a 将读取到的元素存入数组 或在循环里逐个地存入数组:
musics=()
while read -r -d $‘\0‘; do
musics+=("$REPLY")
done < <(find $HOME/Music -type f -print0)
上例中的 -r 和 -d 选项以及REPLY变量都很有趣。
引号,很容易被忽略,但是对于Shell来说是极其重要的部分。单引号用于阻止Shell解释其中的内容,双引号用于保护空格。
传统的UNIX管道模式是“一个输入,一个输出”。用函数的观点来看就是只允许一个参数的函数调用,其弊端王垠也提到过。不过现代的Shell已经有了变通的方法了。 例如: 使awk获取多个输入:
awk ‘...‘ <(generate_data) <(another_generate_data) ...
将数据传给多个命令处理:
generate_data | tee >(sort | uniq > sorted_data) >(nl > with_line_number) > raw_data
变量$-: [ "$-" = "*i*" ] 可以判断是否以交互式运行程序
变量$_: 类似于Python交互式环境中的 _(下划线),但没有你想象的好用。
内建命令trap: 可以捕捉信号,Google+上有人贴过使用trap恶搞的脚本,不过它的正式用处应该是清理临时文件,例如:
trap ‘rm -f $temp_file‘ EXIT
8 条评论
感谢
•
没有帮助
•
•
作者保留权利