当然那有这样正式写脚本的,只用来搞清楚细节和装装B,abs风格。eexpress 写了:if then 都对不上。说啥。
【求助】:这段代码是怎么回事?
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 【求助】:这段代码是怎么回事?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 【求助】:这段代码是怎么回事?
kose1@kose1-desktop:~$ (( a < b )) && echo ok || echo fail
fail
kose1@kose1-desktop:~$ (( $a < $b )) && echo ok || echo fail
fail
kose1@kose1-desktop:~$ [[ a < b ]] && echo ok || echo fail
ok
kose1@kose1-desktop:~$ [[ $a < $b ]] && echo ok || echo fail
fail
kose1@kose1-desktop:~$
不带金钱号的字符应该是字符自身,还是双中括号合理。
fail
kose1@kose1-desktop:~$ (( $a < $b )) && echo ok || echo fail
fail
kose1@kose1-desktop:~$ [[ a < b ]] && echo ok || echo fail
ok
kose1@kose1-desktop:~$ [[ $a < $b ]] && echo ok || echo fail
fail
kose1@kose1-desktop:~$
不带金钱号的字符应该是字符自身,还是双中括号合理。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 【求助】:这段代码是怎么回事?
谢谢cnkilior 写了:bash -x
kose1@kose1-desktop:~$ bash -x tmp.sh
+ echo 'Next *if* is part of the comparison for the first *if*.'
Next *if* is part of the comparison for the first *if*.
+ [[ '' = \i\n\t\e\g\e\r ]]
+ [[ '' < '' ]] #果然空小于空,到此为止。
kose1@kose1-desktop:~$ vim tmp.sh
kose1@kose1-desktop:~$ cat tmp.sh
if echo "Next *if* is part of the comparison for the first *if*."
if [[ $comparison = "integer" ]]
then (( a < b )) #(())是数学计算,参见9.7
else
[[ a < b ]]
fi
then
echo '$a is less than $b'
fi
kose1@kose1-desktop:~$ bash -x tmp.sh
+ echo 'Next *if* is part of the comparison for the first *if*.'
Next *if* is part of the comparison for the first *if*.
+ [[ '' = \i\n\t\e\g\e\r ]]
+ [[ a < b ]] $改一改果然有效果。
+ echo '$a is less than $b'
$a is less than $b
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 77
- 注册时间: 2011-04-23 5:28
- 来自: 汕尾遮浪
Re: 【求助】:这段代码是怎么回事?
十分感谢各位大侠的帮助!
特别感谢fnan!解释非常详细。
我现在这样理解:
第三到第七行负责返回一个true或者false,作为第一个if的条件。于是整个代码可以简写为:
if true ;then echo '$a is less than $b';if
和
if false ;then echo '$a is less than $b';if(而这一行if false违背了控制结构的法则,所以直接跳了出来,不再执行后面的then echo '$a is less than $b')。
接着,当我在第六行之后加入一句echo “$a < $b“时,第二个if结构就不再返回false值,而是返回echo “$a < $b“,即是true值。于是顺利地执行了后面的then语句。
特别感谢fnan!解释非常详细。
我现在这样理解:
第三到第七行负责返回一个true或者false,作为第一个if的条件。于是整个代码可以简写为:
if true ;then echo '$a is less than $b';if
和
if false ;then echo '$a is less than $b';if(而这一行if false违背了控制结构的法则,所以直接跳了出来,不再执行后面的then echo '$a is less than $b')。
接着,当我在第六行之后加入一句echo “$a < $b“时,第二个if结构就不再返回false值,而是返回echo “$a < $b“,即是true值。于是顺利地执行了后面的then语句。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 【求助】:这段代码是怎么回事?
在第六行之后加入一句echo “$a < $b“时,第二个if结构先是出现false值,但是接着echo “$a < $b“,即是true值,把if的false隔开了,true才是最后的返回值,于接着,当我在第六行之后加入一句echo “$a < $b“时,第二个if结构就不再返回false值,而是返回echo “$a < $b“,即是true值。于是顺利地执行了后面的then语句。
是顺利地执行了后面的then语句。
(可以说是对的,至少我觉得)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。