huahuaxuwei 发表于 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是用户变量),作何解释?

wsm 发表于 2005-12-2 08:39:17

cmd = "cmd" 加上"$"加上数字“count”
比方说cmd变成 sed $1这样子

huahuaxuwei 发表于 2005-12-5 11:04:06

eval
  命令格式:eval args
  功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执行。

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

MichaelBibby 发表于 2005-12-5 12:48:31

③还有我发现有个在shell里有个{},比如${dir},(dir是用户变量),作何解释?${arg}是变量置换,和$arg有一些小区别

huahuaxuwei 发表于 2005-12-7 14:57:56

何区别啊?我就想知道区别!

MichaelBibby 发表于 2005-12-7 18:05:33

何区别啊?我就想知道区别!
我目前只知道两种情况下应该用${}来引用变量的值,如果你知道更多的情况,还请不吝赐教 :) :

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

#!/bin/sh

echo $10
echo ${10}

在上面的例子代码中,输入至少10个位置参数,然后看看结果,你就知道有何区别了。
2:当变量作为一个字符串中的一部分时:

#!/bin/sh

a=100
echo "a is $a"
echo "abcd is $abcd"
echo "abcd is ${a}bcd"

注意结合脚本看看输出结果。

有不对之处还请多多指教。 :)

demonlj 发表于 2005-12-7 19:36:33

我的理解:eval之所以要用在这里,关键在于其能够解决$$的问题
就像楼主实验的那样

``
$()

都不能支持$$格式
man eval的结果中说的比较清楚了

NAME
       eval - construct command by concatenating arguments

至于${}的使用,就如楼上所说。
ps:楼主需要补下shell知识

MichaelBibby 发表于 2005-12-8 00:01:55

我的理解:eval之所以要用在这里,关键在于其能够解决$$的问题
就像楼主实验的那样

``
$()

都不能支持$$格式
man eval的结果中说的比较清楚了

NAME
       eval - construct command by concatenating arguments

这个问题我碰到过,后来也是用eval解决的
目前只想到这种方法来解决$arg_$arg2变量的问题

demonlj 发表于 2005-12-8 09:23:02

me2,不过现在用shell的时间少了很多。主要有时候会用perl来替换下,说不上来哪个就更好些。但有时候就是想换着用
ps:perl解决这些变量的问题比较easy

BOoRFGOnZ 发表于 2005-12-15 14:59:04

不错的讨论 精华了 :mrgreen:

huahuaxuwei 发表于 2005-12-22 08:51:23


ps:楼主需要补下shell知识

有道理,我才学.呵呵 丢人了.不过 在家丢人比在外面丢人好.
不错的讨论 精华了 :mrgreen:
:cry::cry:
我的帖还能精华 ,上网4年多.第一次啊……
谢谢各位的赐教。
页: [1]
查看完整版本: 帮我解释一下这个语句好么