LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1107|回复: 5

求助:一个短小shell中第一句的含义?

[复制链接]
发表于 2003-9-11 08:55:28 | 显示全部楼层 |阅读模式
#!/bin/sh
# Print a fortune cookie for interactive shells:
if [[ $- = *i* ]]; then# 就是这个[  ];中的内容,而且为什么要有两层括号
  echo
  fortune fortunes fortunes2 linuxcookie
  echo
fi
发表于 2003-9-11 11:30:31 | 显示全部楼层
因为在这个表达式里有*这样的通配符,[..]命令无法解释里面的*,他会提示错误!而[[...]]命令是[...]的改进型,他的可以对表达式中的含有通配符的字符串合理的解释.
[/home/javalee/myshell]if [[ $- = i* ]];then echo ok;fi
ok
[/home/javalee/myshell]if [ $- = i* ]];then echo ok;fi
ksh: [: missing ]
 楼主| 发表于 2003-9-12 14:22:42 | 显示全部楼层

我想知道$-的含义

谢谢!谢谢!!

-----------------------
bash-2.05b$ if [[ $- = i* ]];then echo ok;fi
bash-2.05b$ echo $-
himBH
bash-2.05b$ if [ $- = i* ];then echo ok;fi
bash: [: too many arguments
发表于 2003-9-13 10:01:03 | 显示全部楼层
$-包含了当前shell的选项,如:
[/home/javalee/myshell]echo $-
ims  <=当前的选项是ims
[/home/javalee/myshell]ksh -x
[/home/javalee/myshell]echo $-
+ echo imsx
imsx <=添加了一个选项x
[/home/javalee/myshell]
[/home/javalee/myshell]ksh -v
+ ksh -v
[/home/javalee/myshell]echo $-
echo $-
imsv  <=添加了一个v
[/home/javalee/myshell]
[/home/javalee/myshell]ksh +xv   <=去掉刚才添加的选项
ksh +xv
[/home/javalee/myshell]echo $-
ims
[/home/javalee/myshell]
 楼主| 发表于 2003-9-13 10:54:51 | 显示全部楼层

ok,thanks,but still some quiz

第一次你得到的是ims,用-x参数产生一次子shell,为什么就会得到imsx的结果,而在此基础上再产生的子shell,(-v)参数,没有得到imsxv的结果.如果这是(得到imsv)合理的.为什么-x的那次后,参数会放在ims后面?
也就是说shell的选项是如何继承下来的?
我觉得自己也有些懒,自己不去寻求答案,就是一些why?不好意思,提出来大家参考
发表于 2003-9-13 11:24:16 | 显示全部楼层

回复: ok,thanks,but still some quiz

最初由 gnwd 发表
第一次你得到的是ims,用-x参数产生一次子shell,为什么就会得到imsx的结果,而在此基础上再产生的子shell,(-v)参数,没有得到imsxv的结果.如果这是(得到imsv)合理的.为什么-x的那次后,参数会放在ims后面?
也就是说shell的选项是如何继承下来的?
我觉得自己也有些懒,自己不去寻求答案,就是一些why?不好意思,提出来大家参考

1,他们的顺序是按a-z来排列(?)
2,子shell如何继承的?这个问题很深奥!我也不清楚 :sorry :confused: :ask
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表