Linux Shell 之Meta , In 程序 , Views: 428 , Comments: 0 , Index: 3075 , 17 March 2012

IFS 是用来拆解 command line 的每一个词(word)用的,因为 shell command line是按词来处理的。而 CR 则是用来结束 command line 用的,这也是为何我们敲 命令就会跑的原因。

除了 IFS 与 CR ,常用的 meta 还有:

= : 设定变量。

$ : 作变量或运算替换(请不要与 shell prompt 搞混了)。

> :重导向 stdout。

< :重导向 stdin。 |:命令管线。 & :重导向 file descriptor ,或将命令置于背景执行。 ( ):将其内的命令置於 nested subshell 执行,或用於运算或命令替换。 { }:将其内的命令置於 non-named function 中执行,或用在变量替换的界定范围。 ; :在前一个命令结束时,而忽略其返回值,继续执行下一个命令。 && :在前一个命令结束时,若返回值为 true,继续执行下一个命令。

Shell (四) , In 技术维基 , Views: 482 , Comments: 0 , Index: 2916 , 02 June 2010

谈到 I/O redirection ,不妨先让我们认识一下 File Descriptor (FD) 。程序的运算,在大部份情况下都是进行数据(data)的处理, 这些数据从哪读进?又送出到哪里呢?这就是 file descriptor(FD) 的功用了。

在 shell 程序中,最常使用的 FD 大概有三个,分别为:

0: Standard Input (STDIN)
1: Standard Output (STDOUT)
2: Standard Error Output (STDERR)

在标准情况下,这些 FD 分别跟如下设备(device)关联:

stdin(0): keyboard
stdout(1): monitor
stderr(2): monitor

我们可以用如下下命令测试一下:

$ mail -s test root
this is a test mail.
please skip.
^d (同时按 crtl 跟 d 键)
Shell (三) , In 技术维基 , Views: 764 , Comments: 0 , Index: 3298 , 19 May 2010

在bash shell中,$( )与` ` (反引号)都是用来做命令替换用(command substitution)的。所谓的命令替换与我们第五章学过的变量替换差不多,都是用来重组命令行,完成引号里的命令行,然后将其结果替换出来,再重组命令行。

在操作上,用$( )或` `都无所谓,只是我”个人”比较喜欢用$( ),理由是:

1. ` `很容易与’ ‘ (单引号)搞混乱,尤其对初学者来说。有时在一些奇怪的字形显示中,两种符号是一模一样的(直竖两点)。当然了,有经验的朋友还是一眼就能分辩两者。只是,若能更好的避免混乱,又何乐不为呢?

2. 在多层次的复合替换中,` `须要额外的跳脱( \` )处理,而$( )则比较直观。例如:这是错的:

12