问答详情
源自:9-6 管道符

ll && echo yes || echo no && echo bbb 为啥echo bbb被执行了?

ll && echo yes || echo no && echo bbb 为啥echo bbb被执行了?


[root@localhost ~]# ll && echo yes || echo no && echo bbb

总用量 72

-rw-------. 1 root root 10387 3月  15 13:54 aa.txt

-rw-r--r--. 1 root root  1840 3月   7 23:11 aa.zip

-rw-------. 1 root root  1246 2月   5 07:37 ana.cfg

-rw-------. 1 root root  1246 1月  30 08:08 anaconda-ks.cfg

-rwxr--r--. 1 root root   152 3月  15 13:34 hello.sh

-rw-r--r--. 1 root root 24772 1月  30 08:08 install.log

-rw-r--r--. 1 root root  7690 1月  30 08:07 install.log.syslog

drwxr-xr-x. 6 root root  4096 3月  15 12:18 test

yes

bbb

按理说,echo no 没有被执行,所以echo bbb也不该被执行。

提问者:mk123 2015-03-15 19:20

个回答

  • 努力终不会白费
    2015-09-16 17:39:59

    简单的说,就是  ll && echo yes 的结果会和 ( || echo no)得到结果,此结果再和 (&& echo bbb) 得出结果。


  • mk123
    2015-03-16 20:45:22

    我测试过,好像是这样,连接符号(&&或||)右边的命令是否运行,取决于连接符号左边的各命令运行情况的逻辑预算值,命令运行了逻辑值为1,没有运行逻辑值为0。

    例如:

    ll && echo yes || echo no && echo bbb

    1. ll 运行了,逻辑值为1,

    2. && echo yes 左边=1  因此运行,逻辑值为1

    3. || echo no 左边=1&&1=1,因此不运行,逻辑值为0

    4. && echo bbb 左边=1&&1||0=1 因此运行

    llaa && echo yes || echo no && echo bbb

    -bash: llaa: command not found

    no

    bbb


    1.llaa 运行,逻辑值为0,

    2.&& echo yes 左边=0  不运行,逻辑值为0

    3.|| echo no 左边=0&&0=0,因此运行,逻辑值为1

    4.&& echo bbb 左边=0&&0||1=1 因此运行


  • 好帮手慕珊
    2015-03-16 11:05:30

     命令批量执行,虽然前一个命令没有执行,但yes执行了,bbb同样会认为前一个命令正确执行。

    这种用法不合理