分类: LINUX
2009-07-11 18:00:49
$*和$@扩展的结果几乎完全一样,唯一不同的是当它们被括在双引号中时,$*的值是一个字符串,而$@的值则是一组相互独立的词。
范例14-35
(脚本)
#!/bin/bash
# Scriptname: greet
1 for name in $* # same as for name in $@
2 do
echo Hi $name
3 done
(命令行)
$ greet Dee Bert Lizzy Tommy
Hi Dee
Hi Bert
Hi Lizzy
Hi Tommy
说明
1. $*和$@被展开后是一个所有位置参量的列表,本例中,它们被展开后的结果就等于从命令行传入的参数:Dee、Bert、Lizzy和Tommy。列表中的每个名字被依次赋给for循环的变量name。
2. 执行循环体中的命令,直到列表为空。
3. 关键字done标志循环体的结束。
范例14-36
(脚本)
#!/bin/bash
# Scriptname: permx
1 for file # Empty wordlist
do
2 if [[ -f $file && ! -x $file ]]
then
3 chmod +x $file
echo $file now has execute permission
fi
done
(命令行)
4 $ permx *
addon now has execute permission
checkon now has execute permission
doit now has execute permission
说明
1. 如果没有为for循环提供参数列表,它就对所有位置参量进行遍历。这行等同于for file in $*命令。
2. 文件名将来自命令行。shell将星号(*)扩展为当前工作目录中所有的文件名。如果该文件是一个没有执行权限的文本文件,就执行3的命令。
3. 给每个被处理的文件加上执行权限。
4. shell把命令行里的星号作为通配符进行求值,将它替换为当前目录下的所有文件。shell把这些文件作为参数传给脚本permx。