免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3527 | 回复: 10
打印 上一主题 下一主题

学习:"10) && 與 || 差在哪?"的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-15 12:56 |只看该作者 |倒序浏览
正在学习:"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!' 了!
不知对不???

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

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

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-10-15 13:32 |只看该作者

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

原帖由 "xy-coordinate" 发表:

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

你的理解没什么错

论坛徽章:
0
3 [报告]
发表于 2005-10-15 13:50 |只看该作者

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

$ 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

  1. [ -n "$A" ] && { [ "$A" -lt 100 ] && echo 'too small' || echo 'too big' ; } || echo null
复制代码


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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-10-15 15:18 |只看该作者

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

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

论坛徽章:
0
5 [报告]
发表于 2005-10-15 15:46 |只看该作者

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

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


  

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

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


现在又有问题了!!!
上式中的";"必须要保留吗???
为什么???


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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-10-15 22:00 |只看该作者

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

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

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

论坛徽章:
0
7 [报告]
发表于 2005-10-16 11:31 |只看该作者

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

在 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斑竹能不能赐教一二呀!

[ 本帖最后由 xy-coordinate 于 2007-5-14 09:49 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2005-10-16 12:50 |只看该作者

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

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

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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-10-16 12:52 |只看该作者

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

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

论坛徽章:
0
10 [报告]
发表于 2005-10-17 17:19 |只看该作者

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

谢谢楼上的大虾们回帖!
我回去慢慢再琢磨琢磨!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP