在shell中(), {}的区别可能平时不太注意的,但如果真正理解了他们的区别的话,更有助于理解shell,
()和{}都是用来包含代码块的,()将会重新fork一个子进程,在shell中父进程的变量及资源都会继承到子进程,反过来不行,{}多是用来定义函数时用的,所以就比较好理解了,还是先打开shell动下手:)
$a=1
$echo $a
$1
${ b=1; echo $b; }
$echo $b
$(c=1;echo $c)
$echo $c
$
从上面的执行结果就可以看出来了,最终的echo $c的结果为空,因为c的定义是在()开启的子进程中定义的,不能传递到当前shell(即父进程)的.
理解了上面的,理解exec与source(或者.)的区别就比较简单了,
exec command_or_script 将会开启一个子进程来运行后面的command或者是script, 并且将同时终止当前父进程
source script_name 一般用在调用其他脚本到当前文件环境中来,相当于ruby的require或者php的include, 调用的脚本文件同当前文件位于同一进程
可以试下:
$exec echo "hello" > file
执行后你当前登录的shell将会退出,让你重新登录, 同时hello将会写入file中
2008-09-17 15:22:23, 751 reviews
send to mailbox
Shell script to backup all MySQL database
【转载】命令的小总结
MySQL Innodb备份
shell中的数组
一些shell技巧
一个小命令
awk同时操作两个文件
shell小技巧
Shell: 统计MySQL InnoDB表的大小
awk多维数组
shitou
2009-05-07 09:03:53
just DO NOT support IE