QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2635|回复: 10

帮我解释一下这个语句好么

[复制链接]
发表于 2005-12-2 08:34:05 | 显示全部楼层 |阅读模式
1      #!/bin/bash
2      count=$#
3      cmd=echo
4      while true
5      do
6         cmd="$cmd \$$count"           #这里
7         let count=$count-1
8         if   [ $count -eq 0 ]
9         then   break
10       fi
11    done
12    eval $cmd                                #这里
13    #end

①那个第六句我不明白,我换成:
cmd "$cmd \$$count"
$cmd "$cmd \$$count"
$cmd="$cmd \$$count"
都不行.能解释一下为什么么?最好通俗一些.三四岁的话.
②第十二句的eval啥意思呢?
③还有我发现有个在shell里有个{},比如${dir},(dir是用户变量),作何解释?
发表于 2005-12-2 08:39:17 | 显示全部楼层
cmd = "cmd" 加上"$"加上数字“count”
比方说cmd变成 sed $1这样子
回复

使用道具 举报

 楼主| 发表于 2005-12-5 11:04:06 | 显示全部楼层
eval
  命令格式:eval args
  功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执行。

③还有我发现有个在shell里有个{},比如${dir},(dir是用户变量),作何解释?
回复

使用道具 举报

发表于 2005-12-5 12:48:31 | 显示全部楼层
[quote:c48374945c="huahuaxuwei"]③还有我发现有个在shell里有个{},比如${dir},(dir是用户变量),作何解释?[/quote]${arg}是变量置换,和$arg有一些小区别
回复

使用道具 举报

 楼主| 发表于 2005-12-7 14:57:56 | 显示全部楼层
何区别啊?我就想知道区别!
回复

使用道具 举报

发表于 2005-12-7 18:05:33 | 显示全部楼层
[quote:2f65e3e2a7="huahuaxuwei"]何区别啊?我就想知道区别![/quote]
我目前只知道两种情况下应该用${}来引用变量的值,如果你知道更多的情况,还请不吝赐教

1:超过9个位置参数时,第十个以后的位置参数的值需要使用${}来获得;
e.g:
[code:1]
#!/bin/sh

echo $10
echo ${10}
[/code:1]
在上面的例子代码中,输入至少10个位置参数,然后看看结果,你就知道有何区别了。
2:当变量作为一个字符串中的一部分时:
[code:1]
#!/bin/sh

a=100
echo "a is $a"
echo "abcd is $abcd"
echo "abcd is ${a}bcd"
[/code:1]
注意结合脚本看看输出结果。

有不对之处还请多多指教。
回复

使用道具 举报

发表于 2005-12-7 19:36:33 | 显示全部楼层
我的理解:eval之所以要用在这里,关键在于其能够解决$$的问题
就像楼主实验的那样
[code:1]
``
$()
[/code:1]
都不能支持$$格式
man eval的结果中说的比较清楚了
[code:1]
NAME
       eval - construct command by concatenating arguments
[/code:1]
至于${}的使用,就如楼上所说。
ps:楼主需要补下shell知识
回复

使用道具 举报

发表于 2005-12-8 00:01:55 | 显示全部楼层
[quote:a38a41627e="demonlj"]我的理解:eval之所以要用在这里,关键在于其能够解决$$的问题
就像楼主实验的那样
[code:1]
``
$()
[/code:1]
都不能支持$$格式
man eval的结果中说的比较清楚了
[code:1]
NAME
       eval - construct command by concatenating arguments
[/code:1]
[/quote]这个问题我碰到过,后来也是用eval解决的
目前只想到这种方法来解决$arg_$arg2变量的问题
回复

使用道具 举报

发表于 2005-12-8 09:23:02 | 显示全部楼层
me2,不过现在用shell的时间少了很多。主要有时候会用perl来替换下,说不上来哪个就更好些。但有时候就是想换着用
ps:perl解决这些变量的问题比较easy
回复

使用道具 举报

发表于 2005-12-15 14:59:04 | 显示全部楼层
不错的讨论 精华了
回复

使用道具 举报

 楼主| 发表于 2005-12-22 08:51:23 | 显示全部楼层
[quote:08f8de9fa2="demonlj"]
ps:楼主需要补下shell知识
[/quote]
有道理,我才学.呵呵 丢人了.不过 在家丢人比在外面丢人好.
[quote:08f8de9fa2="BOoRFGOnZ"]不错的讨论 精华了 [/quote]
  
我的帖还能精华 ,上网4年多.第一次啊……
谢谢各位的赐教。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 14:35 , Processed in 0.073901 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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