一个关于shell变量的问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
5451vs5451
帖子: 345
注册时间: 2006-07-14 18:56
来自: Apple Valley, Planet Tux, Linux System

一个关于shell变量的问题

#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
回复