rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C12%5Cclip_filelist.xml">
嗯,这次轻松一下,不讲太多... ^_^
先说一下,为何要用 ( ) 或 { } 好了。
许多时候,我们在 shell 操作上,需要在一定条件下一次执行多个命令,
也就是说,要么不执行,要么就全执行,而不是每次依序的判断是否要执行下一个命令。
或是,需要从一些命令执行优先次顺中得到豁免,如算术的 2*(3+4) 那样...
这时候,我们就可引入"命令群组"(command group)的概念:将多个命令集中处理。
在 shell command line 中,一般人或许不太计较 ( ) 与 { } 这两对符号的差异,
虽然两者都可将多个命令作群组化处理,但若从技术细节上,却是很不一样的:
( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell。
{ } 则是在同一个 shell 内完成,也称为 non-named command group。
若,你对上一章的 fork 与 source 的概念还记得了的话,那就不难理解两者的差异了。
要是在 command group 中扯上变量及其它环境的修改,我们可以根据不同的需求来使用 ( ) 或 { } 。
通常而言,若所作的修改是临时的,且不想影响原有或以后的设定,那我们就 nested sub-shell ,
反之,则用 non-named command group 。
是的,光从 command line 来看,( ) 与 { } 的差别就讲完了,够轻松吧~~~ ^_^
然而,若这两个 meta 用在其它 command meta 或领域中(如 Regular Expression),还是有很多差别的。
只是,我不打算再去说明了,留给读者自己慢慢发掘好了...
我这里只想补充一个概念,就是 function 。
所谓的 function ,就是用一个名字去命名一个 command group ,然后再调用这个名字去执行 command group 。
从 non-named command group 来推断,大概你也可以猜到我要说的是 { } 了吧?(yes! 你真聪明﹗ ^_^ )
在 bash 中,function 的定义方式有两种:
方式一:
CODE:[Copy to clipboard]function function_name {
command1
command2
command3
....
}
方式二:
CODE:[Copy to clipboard]fuction_name () {
command1
command2
command3
....
}
用哪一种方式无所谓,只是若碰到所定意的名称与现有的命令或别名(Alias)冲突的话,方式二或许会失败。
但方式二起码可以少打 function 这一串英文字母,对懒人来说(如我),又何乐不为呢?... ^_^
function 在某一程度来说,也可称为"函式",但请不要与传统编程所使用的函式(library)搞混了,毕竟两者差异很大。
惟一相同的是,我们都可以随时用"已定义的名称"来调用它们...
若我们在 shell 操作中,需要不断的重复质行某些命令,我们首先想到的,或许是将命令写成命令稿(shell script)。
不过,我们也可以写成 function ,然后在 command line 中打上 function_name 就可当一舨的 script 来使用了。
只是若你在 shell 中定义的 function ,除了可用 unset function_name 取消外,一旦退出 shell ,function 也跟着取消。
然而,在 script 中使用 function 却有许多好处,除了可以提高整体 script 的执行效能外(因为已被加载),
还可以节省许多重复的代码...
简单而言,若你会将多个命令写成 script 以供调用的话,那,你可以将 function 看成是 script 中的 script ... ^_^
而且,透过上一章介绍的 source 命令,我们可以自行定义许许多多好用的 function ,再集中写在特定文件中,
然后,在其它的 script 中用 source 将它们加载并反复执行。
若你是 RedHat linux 的使用者,或许,已经猜得出 /etc/rc.d/init.d/functions 这个文件是作啥用的了~~~ ^_^
okay ,说要轻松点的嘛,那这次就暂时写到这吧。祝大家学习愉快﹗ ^_^
7) ( ) 与 { } 差在哪?
嗯,这次轻松一下,不讲太多... ^_^
先说一下,为何要用 ( ) 或 { } 好了。
许多时候,我们在 shell 操作上,需要在一定条件下一次执行多个命令,
也就是说,要么不执行,要么就全执行,而不是每次依序的判断是否要执行下一个命令。
或是,需要从一些命令执行优先次顺中得到豁免,如算术的 2*(3+4) 那样...
这时候,我们就可引入"命令群组"(command group)的概念:将多个命令集中处理。
在 shell command line 中,一般人或许不太计较 ( ) 与 { } 这两对符号的差异,
虽然两者都可将多个命令作群组化处理,但若从技术细节上,却是很不一样的:
( ) 将 command group 置于 sub-shell 去执行,也称 nested sub-shell。
{ } 则是在同一个 shell 内完成,也称为 non-named command group。
若,你对上一章的 fork 与 source 的概念还记得了的话,那就不难理解两者的差异了。
要是在 command group 中扯上变量及其它环境的修改,我们可以根据不同的需求来使用 ( ) 或 { } 。
通常而言,若所作的修改是临时的,且不想影响原有或以后的设定,那我们就 nested sub-shell ,
反之,则用 non-named command group 。
是的,光从 command line 来看,( ) 与 { } 的差别就讲完了,够轻松吧~~~ ^_^
然而,若这两个 meta 用在其它 command meta 或领域中(如 Regular Expression),还是有很多差别的。
只是,我不打算再去说明了,留给读者自己慢慢发掘好了...
我这里只想补充一个概念,就是 function 。
所谓的 function ,就是用一个名字去命名一个 command group ,然后再调用这个名字去执行 command group 。
从 non-named command group 来推断,大概你也可以猜到我要说的是 { } 了吧?(yes! 你真聪明﹗ ^_^ )
在 bash 中,function 的定义方式有两种:
方式一:
CODE:[Copy to clipboard]function function_name {
command1
command2
command3
....
}
方式二:
CODE:[Copy to clipboard]fuction_name () {
command1
command2
command3
....
}
用哪一种方式无所谓,只是若碰到所定意的名称与现有的命令或别名(Alias)冲突的话,方式二或许会失败。
但方式二起码可以少打 function 这一串英文字母,对懒人来说(如我),又何乐不为呢?... ^_^
function 在某一程度来说,也可称为"函式",但请不要与传统编程所使用的函式(library)搞混了,毕竟两者差异很大。
惟一相同的是,我们都可以随时用"已定义的名称"来调用它们...
若我们在 shell 操作中,需要不断的重复质行某些命令,我们首先想到的,或许是将命令写成命令稿(shell script)。
不过,我们也可以写成 function ,然后在 command line 中打上 function_name 就可当一舨的 script 来使用了。
只是若你在 shell 中定义的 function ,除了可用 unset function_name 取消外,一旦退出 shell ,function 也跟着取消。
然而,在 script 中使用 function 却有许多好处,除了可以提高整体 script 的执行效能外(因为已被加载),
还可以节省许多重复的代码...
简单而言,若你会将多个命令写成 script 以供调用的话,那,你可以将 function 看成是 script 中的 script ... ^_^
而且,透过上一章介绍的 source 命令,我们可以自行定义许许多多好用的 function ,再集中写在特定文件中,
然后,在其它的 script 中用 source 将它们加载并反复执行。
若你是 RedHat linux 的使用者,或许,已经猜得出 /etc/rc.d/init.d/functions 这个文件是作啥用的了~~~ ^_^
okay ,说要轻松点的嘛,那这次就暂时写到这吧。祝大家学习愉快﹗ ^_^