sh/bash/dash/ksh/zsh等Shell脚本
-
5451vs5451
- 帖子: 345
- 注册时间: 2006-07-14 18:56
- 来自: Apple Valley, Planet Tux, Linux System
#1
帖子
由 5451vs5451 » 2006-08-14 22:31
下面是由fwbuilder生成的一段代码。
代码: 全选
cat /proc/net/ip_tables_names | while read table; do
test "X$table" = "Xmangle" && continue
$IPTABLES -t $table -L -n | while read c chain rest; do
if test "X$c" = "XChain" ; then
$IPTABLES -t $table -F $chain
fi
done
$IPTABLES -t $table -X
done
我想问一下,这里判断变量取值的时候为什么要在前面加上一个X呢?
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#2
帖子
由 eexpress » 2006-08-14 23:23
是在判断的时候需要固定前缀吧。就像键盘的键名定义,在头文件里面找键名时要加固定的前缀。
或者是一种习惯,因为test的2边都固定加了X,以和其他普通变量区分。
我的问题还没人看呢。看看去吧。
● 鸣学
-
laborer
- 帖子: 1016
- 注册时间: 2005-10-25 11:15
-
联系:
#3
帖子
由 laborer » 2006-08-15 0:46
我见过的大部分脚本都是加"x"来判断的,原因我想可能是兼容旧版本,或者是兼容某些实现的较差的shell(比如Irix,Solaris等Unix上面的shell)而设计的。可能在这些版本中,空字符串""被忽略了,比如
代码: 全选
if [ "a" = "" ]; then ...
被认成了
代码: 全选
if [ "a" = ]; then ...
自然就因为缺少变量而出错了。两边各加一个前缀"x",就可以避免这个问题。
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser