+ -
当前位置:首页 → 问答吧 → shell 相关问题

shell 相关问题

时间:2011-11-22

来源:互联网

[[ $((STATUS|STATUS_1)) -eq 0 ]] && STATUS=0 || echo -e "Can not find lp or lpadmin command!\n" && exit 1


这样一个表达式,理论上应该只有当[[ $((STATUS|STATUS_1)) -eq 0 ]] 不满足时,才会执行||后的内容,为什么[[ $((STATUS|STATUS_1)) -eq 0 ]]满足的情况下 也会 执行后面的exit 1?

作者: luoyaojun000   发布时间: 2011-11-22

anybody know it?

作者: luoyaojun000   发布时间: 2011-11-22

Assembly code

[root@RHEL6A ~]# STATUS=1
[root@RHEL6A ~]# STATUS_1=1
[root@RHEL6A ~]# [[ $((STATUS|STATUS_1)) -eq 0 ]] && STATUS=0 || (echo "Can not find lp or lpadmin command" && exit 1)
Can not find lp or lpadmin command
[root@RHEL6A ~]# STATUS=0
[root@RHEL6A ~]# STATUS_1=0
[root@RHEL6A ~]# [[ $((STATUS|STATUS_1)) -eq 0 ]] && STATUS=0 || (echo "Can not find lp or lpadmin command" && exit 1)
[root@RHEL6A ~]# 

作者: askandstudy   发布时间: 2011-11-22

可能是一个判断的组合顺序问题

作者: askandstudy   发布时间: 2011-11-22

引用 2 楼 askandstudy 的回复:
Assembly code

[root@RHEL6A ~]# STATUS=1
[root@RHEL6A ~]# STATUS_1=1
[root@RHEL6A ~]# [[ $((STATUS|STATUS_1)) -eq 0 ]] && STATUS=0 || (echo "Can not find lp or lpadmin command" && ……


no... () 是在我这shell里面另外开一个进程.在()里的exit不会导致退出父shell 只是退出了()而已

作者: luoyaojun000   发布时间: 2011-11-22

谁来解决下这个问题

作者: luoyaojun000   发布时间: 2011-11-22

e1 && STATUS=0 || echo -e "aaa" && exit 1

应该是顺序判断执行的吧
e1为真时,执行后面的STATUS=0 || echo -e "aaa" && exit 1

而STATUS=0应该是恒真的,不会执行echo -e "aaa",转而执行exit 1

作者: justkk   发布时间: 2011-11-22

&&和||优先级相同 这种名为列表结构的语法 是从左至右执行的。 e1成功则执行STATUS=0 否则不执行STATUS=0转而执行echo && exit

作者: luoyaojun000   发布时间: 2011-11-22

引用 6 楼 justkk 的回复:

e1 && STATUS=0 || echo -e "aaa" && exit 1

应该是顺序判断执行的吧
e1为真时,执行后面的STATUS=0 || echo -e "aaa" && exit 1

而STATUS=0应该是恒真的,不会执行echo -e "aaa",转而执行exit 1

正解。。。如果你一定要先执行echo -e "aaa"再执行exit 1,用{echo -e "aaa" && exit 1}

作者: xiangliangyu2008   发布时间: 2011-11-22

[[ $((STATUS|STATUS_1)) -eq 0 ]] && STATUS=0 || echo -e "Can not find lp or lpadmin command!\n" && exit 1

这还是一个正常的条件表达式,

$((STATUS|STATUS_1)) -eq 0 真,那么STATUS=0恒真,就不继续执行了。

$((STATUS|STATUS_1)) -eq 0 假,那么掠过STATUS=0, 执行echo -e "Can not find lp or lpadmin command!\n" 恒真,指针exit1.

作者: qq120848369   发布时间: 2011-11-22

引用 8 楼 xiangliangyu2008 的回复:

引用 6 楼 justkk 的回复:

e1 && STATUS=0 || echo -e "aaa" && exit 1

应该是顺序判断执行的吧
e1为真时,执行后面的STATUS=0 || echo -e "aaa" && exit 1

而STATUS=0应该是恒真的,不会执行e……


为什么这玩意是顺序执行的,求解答啊。

作者: qq120848369   发布时间: 2011-11-22