正在学习:"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'
是什么意思?
|