LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: benu

刚学shell, 写了一个小脚本,老是不对,请教。

[复制链接]
 楼主| 发表于 2004-9-5 22:42:01 | 显示全部楼层
多谢不厌其烦的回答,我再看了来再问
发表于 2004-9-5 22:53:56 | 显示全部楼层
最初由 benu 发表
多谢不厌其烦的回答,我再看了来再问

呵呵,别客气
推荐使用:
[ ... ] ----> [[ ... ]] #如: [ $a == $b ] ==> [[ $a == $b ]]
`command` ---> $(command) #如: `date` ==> $(date) (csh除外)
上述两个例子,都是"现代"shell比较流行的写法 ;)
对于各种循环结构,看看入门教程,再做些练习,相信恨容易掌握滴
发表于 2004-9-5 23:01:02 | 显示全部楼层
脚本,我还没开始学。有适合的教材吗?
发表于 2004-9-5 23:05:59 | 显示全部楼层
最初由 小小帅 发表
脚本,我还没开始学。有适合的教材吗?

新来的兄弟,可以先看看置顶的入门教程/文章,如:
http://www.linuxsir.cn/bbs/showthread.php?threadid=28945
发表于 2004-9-5 23:16:20 | 显示全部楼层
谢谢热情的前辈!
 楼主| 发表于 2004-9-5 23:16:34 | 显示全部楼层

又来了

"$*" 和 $* 在语义上有什么区别。

比如下面的脚本

  1. echo $#
  2. echo $*
  3. for var in "$*"
  4. do
  5.         echo $var
  6. done
复制代码

输入scriptname a b c执行
上面的脚本输出是
  1. ]
  2. 3
  3. a b c
  4. a b c
复制代码

而如果将脚本改成这样 ( "$*" 换成 "$*")

  1. echo $#
  2. echo $*
  3. for var in $*
  4. do
  5.         echo $var
  6. done
复制代码

输出是

  1. 3
  2. a b c
  3. a
  4. b
  5. c
复制代码


为什么?
发表于 2004-9-5 23:35:24 | 显示全部楼层
如果:
for var "$*";do echo $var;done
这个$var中的list,实际只是用引号括引起来的一个变量,而:
for var $*;do echo $var;done
这个$var中的list,是由空格为分隔符的多个元素,每循环一次,显示一个元素,知道$var为空为止.
这就是有无双引号的区别吧 (我的理解)
 楼主| 发表于 2004-9-5 23:39:34 | 显示全部楼层
我也是这样理解的,可我将 "$*"与"a b c"比较,总是不同
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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