###我使用zsh,其他shell不负责


zsh debug

zsh -x 

cmd desc
^foo^bar replace first occurrence of foo to bar
!!:gs/foo/bar replace all foo to bar

arr=(1 2 3)
echo ${arr[@]} #输出数组内容 
echo ${arr[*]} #输出数组内容 
echo ${#arr[@]} #数组size

引用: http://blog.csdn.net/ljianhui/article/details/43128465

#:表示从左边算起第一个

%:表示从右边算起第一个

##:表示从左边算起最后一个

换句话来说,#总是表示左边算起,%总是表示右边算起。

*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。

获取文件后缀

fileName=/hello/world.blabla.wtf
suffix=${$(basename $fileName)#*.}
echo $suffix
blabla.wtf

处理文件名中的空格:给$file 加上引号,通常情况下,引号中的空格可以被正确的处理 如

"$file"

但无法处理管道、子Shell等复杂的情况,终极的解决办法就是设置IFS(the Internal Field Separator),不要用空格做为IFS,选择其他的符号 如

#!/usr/bin/env bash
IFS='$'

json_pp貌似更好一些

echo '[1,2,3,{"4":5,"6":7}]' | json_pp
echo '[1,2,3,{"4":5,"6":7}]' | python -m json.tool

get header only

curl -X HEAD xxx.com
curl -I xxx.com == curl --head xxx.com
http --headers xxx.com //httpie

推荐commandlinefu.com