本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅
1 function show_input_type()
2 {
3 [ -p /dev/fd/0 ] && echo PIPE || echo STDIN #-p 检查文件是不是管道文件
4 }
5
6 show_input_type "Input"
7 echo "Input" | show_input_type
换种形式
1 function show_input_type()
2 {
3 if [ -p /dev/fd/0 ]
4 then
5 echo PIPE
6 else
7 echo STDIN
8 fi
9 }
10
11 show_input_type "Input"
12 echo "Input" | show_input_type
这个脚本是对标准输入的参数传入形式做一个判断,如果是直接输入的,那么echo STDIN,如果是通过管道的形式传入的参数,那么打印echo PIPE
这个脚本中/dev/fd/0换成/proc/self/fd或/dev/stdin也是成立的
注意:/dev/fd下的文件描述符0,1,2都软链接到第二个终端/dev/pts/1,而/proc/self/fd下的文件描述符0,1,2也都软链接到/dev/pts/1,而设备文件名/dev/stdin,/dev/stdout,/dev/stderr又都软链接到/proc/self/fd/0、1、2,试问,/dev/fd下的文件描述符和/proc/self/fd下的有什么区别和联系?
shell中函数的定义有两种方法
function fname()
{
statements;
}
或
fname()
{
statements;
}
注意,()内是没有参数的,它并不像C语言那样,在()里可以有参数
那么这些参数要怎么传递进来呢?其实参数传递方式为:fname;(不需要传递参数)或fname agr1 arg2(需要传递两个参数)