帮我解释一下这个语句好么
1 #!/bin/bash2 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是用户变量),作何解释? cmd = "cmd" 加上"$"加上数字“count”
比方说cmd变成 sed $1这样子 eval
命令格式:eval args
功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执行。
③还有我发现有个在shell里有个{},比如${dir},(dir是用户变量),作何解释? ③还有我发现有个在shell里有个{},比如${dir},(dir是用户变量),作何解释?${arg}是变量置换,和$arg有一些小区别 何区别啊?我就想知道区别! 何区别啊?我就想知道区别!
我目前只知道两种情况下应该用${}来引用变量的值,如果你知道更多的情况,还请不吝赐教 :) :
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"
注意结合脚本看看输出结果。
有不对之处还请多多指教。 :) 我的理解:eval之所以要用在这里,关键在于其能够解决$$的问题
就像楼主实验的那样
``
$()
都不能支持$$格式
man eval的结果中说的比较清楚了
NAME
eval - construct command by concatenating arguments
至于${}的使用,就如楼上所说。
ps:楼主需要补下shell知识 我的理解:eval之所以要用在这里,关键在于其能够解决$$的问题
就像楼主实验的那样
``
$()
都不能支持$$格式
man eval的结果中说的比较清楚了
NAME
eval - construct command by concatenating arguments
这个问题我碰到过,后来也是用eval解决的
目前只想到这种方法来解决$arg_$arg2变量的问题 me2,不过现在用shell的时间少了很多。主要有时候会用perl来替换下,说不上来哪个就更好些。但有时候就是想换着用
ps:perl解决这些变量的问题比较easy 不错的讨论 精华了 :mrgreen:
ps:楼主需要补下shell知识
有道理,我才学.呵呵 丢人了.不过 在家丢人比在外面丢人好.
不错的讨论 精华了 :mrgreen:
:cry::cry:
我的帖还能精华 ,上网4年多.第一次啊……
谢谢各位的赐教。
页:
[1]