BASH的参数可以用$加数字编号来访问。
如$1代表第一个参数,$2代表第二个参数,以此类推.
但不能用$10来访问第十个参数,如果遇到参数超过十个的情况,必须处理或保存第一个参数($1),然后使用 shift
命令删除参数1并将所有剩余的参数下移一位,因此$10就变成了$9.
$#的值将被更新以反映参数的剩余数量。
请看下面这个例子:
1 #!/bin/bash
2 i=1;
3 while (($#>0))
4 do
5 echo $i, $1
6 shift
7 let i=i+1
8 done
存为huabo_cat,加上可执行权限。
然后执行
[src]# huabo_cat apr*
1, apr.h
2, apr_allocator.h
3, apr_errno.h
4, apr_file_info.h
5, apr_file_io.h
6, apr_general.h
7, apr_inherit.h
8, apr_pools.h
9, apr_queue.h
10, apr_tables.h
11, apr_thread_mutex.h
12, apr_time.h
13, apr_user.h
14, apr_want.h
结果表明,脚本循环输出了通配符所匹配的所有文件名。
这个脚本稍做修改,就可以实现更实用的功能。
如下:
1 #!/bin/bash
2 while (($#>0))
3 do
4 echo ------$1------
5 (cat $1)
6 shift
7 done
执行
[src]# huabo_cat apr* | grep -e ^---- -e '^struct iovec'
------apr.h------
------apr_allocator.h------
------apr_errno.h------
------apr_file_info.h------
------apr_file_io.h------
------apr_general.h------
------apr_inherit.h------
------apr_pools.h------
------apr_queue.h------
------apr_tables.h------
------apr_thread_mutex.h------
------apr_time.h------
------apr_user.h------
------apr_want.h------
struct iovec
这样可以清楚的看到struct iovec在apr_want.h文件中定义的。
而直接使用cat没这个效果。
[src]# cat apr* | grep -e ^---- -e '^struct iovec'
struct iovec
阅读(8887) | 评论(1) | 转发(0) |