shell tips

通配符 *

shell 将通配符*替换为当前目录下的各个文件和目录,然后再传给命令。
比如ls *是ls(当前目录下的所有文件 + 当前目录下所有文件夹), 其中ls(当前目录下所有文件夹) 将会列举这些文件夹下的文件(夹)

1
2
3
4
5
6
7
8
➜ ls -p    # append '/' at the end of a directory
pkg/ tmp

➜ ls *
tmp

pkg: # list content in directory pkg
a.tgz.gpg read.sh

括号和大括号

() 包裹的代码在子shell 里执行,{} 包含的代码在当前shell里执行

1
2
3
4
5
6
7
8
➜ (a=$PWD;echo $a;)
/Users/lin
echo $a # a is not defined in current shell

➜ { a=$PWD;echo $a; }
/Users/lin
echo $a
/Users/lin

echo $((expression))

运算展开

1
2
echo $((1+2))
3

进制

写法 含义
0开头 8进制
0x开头 16进制
[base#]n base进制,n is a number in that base
1
2
3
4
5
6
7
8
echo $((1))
1

echo $((2#11))
3

echo $((2#3))
zsh: bad math expression: operator expected at `3'

单引号和双引号

被双引号括起的内容常量还是常量,变量则会替换成变量内容。
被单引号括起的内容不会发生替换。

1
2
3
4
5
➜ var=dablelv
➜ echo '$var'
$var
➜ echo "$var"
dablelv

To be continued.