首页 > 学技术 > 技术网文 > Linux Shell > 正文

[保留] 学习:"10) && 與 || 差在哪?"的疑问


来源 chinaunix.net 酷勤网整理

正在学习:"10) && 與 || 差在哪?"

引用:$ A=123 
$ [ -n "$A" ] && echo "yes! it's ture." || echo "no, it's NOT ture." 
yes! it's ture. 
$ unset A 
$ [ -n "$A" ] && echo "yes! it's ture." || echo "no, it's NOT ture." 
no, it's NOT ture.


引用:$ A=123 
$ [ -n "$A" ] && [ "$A" -lt 100 ] || echo 'too big!' 
too big!
$ unset A 
$ [ -n "$A" ] && [ "$A" -lt 100 ] || echo 'too big!' 
too big! 



 $ unset A 
$ [ -n "$A" ] && [ "$A" -lt 100 ] || echo 'too big!' 

我是初学者,个人理解:
 因为A为null,所以[ -n "$A" ] 判断为假,然后"&&"之后的[ "$A" -lt 100 ] 就不执行了,直接到"||"执行echo 'too big!' 了!
不知对不??? :em02: 

但是原文中的:
引用:為何上面的結果也可得到呢? 
又,如何解決之呢? 
(提示:修改方法很多,其中一種方法可利用第七章介紹過的 command group ...) 


"如何解決之呢?"这句话是什么意思???
 :em02:  :em02:  :em02: 
请问:解决什么???



 寂寞烈火 回复于:2005-10-15 13:32:55

引用:原帖由 "xy-coordinate" 发表:

"如何解決之呢?"这句话是什么意思???
 :em02:  :em02:  :em02: 
请问:解决什么???


你的理解没什么错 :mrgreen:


 styr 回复于:2005-10-15 13:50:29

引用:$ unset A 
$ [ -n "$A" ] && [ "$A" -lt 100 ] || echo 'too big!' 

我是初学者,个人理解: 
因为A为null,所以[ -n "$A" ] 判断为假,然后"&&"之后的[ "$A" -lt 100 ] 就不执行了,直接到"||"执行echo 'too big!' 了! 
不知对不???  

但是原文中的: 
引用: 
為何上面的結果也可得到呢? 
又,如何解決之呢? 
(提示:修改方法很多,其中一種方法可利用第七章介紹過的 command group ...)  

"如何解決之呢?"这句话是什么意思??? 
     
请问:解决什么???



[ -n "$A" ] && [ "$A" -lt 100 ] || echo 'too big!' 
当无值时是echo 'too big!' ,可是当有值大于100时,也会执行 echo 'too big'

贴子已经说了啊,解决办法就是command group 
看shell的意思是先判断变量是否有值,如果有值,再判断是否小于100,如果大于100,就显示 too big

[ -n "$A" ] && { [ "$A" -lt 100 ] && echo 'too small' || echo 'too big' ; } || echo null


就是成组命令  { cmd ; cmd ; }


 網中人 回复于:2005-10-15 15:18:32

[ -n "$A" ] && { [ "$A" -lt 100 ] || echo 'too big!'; }


 xy-coordinate 回复于:2005-10-15 15:46:17

太感谢大家了!
 :em02: 学习不太仔细呀!!!
引用:
[ -n "$A" ] && { [ "$A" -lt 100 ] && echo 'too small' || echo 'too big' ; }  || echo null



 :em02:  

原文的意思是只要A为null,就不执行后面的"&&","||"了!
但是引用:$ unset A 
$ [ -n "$A" ] && [ "$A" -lt 100 ] || echo 'too big!' 


却显示"too big!"
怎么解决呢?
方法:
引用:[ -n "$A" ] && { [ "$A" -lt 100 ] || echo 'too big!'[color=red]; [/color]}


[color=red]现在又有问题了!!!
上式中的";"必须要保留吗???
为什么??? :em14:
[/color]

[ 本帖最后由 xy-coordinate 于 2005-11-1 12:40 编辑 ]


 網中人 回复于:2005-10-15 22:00:00

你用 { } 就得用 ; 來隔, 或將 } 寫到下一行.

或, 用 ( ) 就不用了. 但你要搞懂 { } 跟 ( ) 差在哪?


 xy-coordinate 回复于:2005-10-16 11:31:04

引用:在 shell command line 中,一般人或許不太計較 ( ) 與 { } 這兩對符號的差異, 
雖然兩者都可將多個命令作群組化處理,但若從技術細節上,卻是很不一樣的: 
( ) 將 command group 置於 sub-shell 去執行,也稱 nested sub-shell。 
{ } 則是在同一個 shell 內完成,也稱為 non-named command group。 
若,你對上一章的 fork 與 source 的概念還記得了的話,那就不難理解兩者的差異了。 
要是在 command group 中扯上變量及其他環境的修改,我們可以根據不同的需求來使用 ( ) 或 { } 。 
通常而言,若所作的修改是臨時的,且不想影響原有或以後的設定,那我們就 nested sub-shell , 
反之,則用 non-named command group 。



有几个英文名称不太明白 :!: 
nested sub-shell :复合子shell???
non-named command group:无名命令组???

fork:???

netman斑竹能不能赐教一二呀! :D


 網中人 回复于:2005-10-16 12:50:35

恩... 名詞可以不那麼計較. 懂原理就好.
你喜歡, 就將 nested-subshell 稱為 X, 然後 command grouping 稱為 Y .

當然, 若你對 subshell 跟 netsted subshell 能分辨出來那更好.
能搞懂 named command group (function) 跟 non-named command group 差在哪更好!


 網中人 回复于:2005-10-16 12:52:01

nested subshell 的討論:
http://bbs.chinaunix.net/forum/24/20040906/401274.html


 xy-coordinate 回复于:2005-10-17 17:19:26

谢谢楼上的大虾们回帖!
我回去慢慢再琢磨琢磨!


 零的起点 回复于:2005-10-20 09:27:23

echo '十人|日一|十十o' | sed 's/.../&\n/g' 

是什么意思?




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=628078
转载请注明作者名及原文出处



收藏本页到: