bash true / false重定向错误

时间:2011-08-17 08:48:42

标签: bash testing

在Ubuntu 11.04上的bash 4.2.8(1)-releasex86_64-pc-linux-gnu)此命令

[ $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 ] || echo "no"

产量

 echo: command not found

只要||条款生效即可。 &&子句正在运行。我尝试更改订单(先||,先&&)无效。

有趣的是,

true && echo "yes" || echo "no"

产量

yes

false && echo "yes" || echo "no"

产量

no

所以我认为我的test-clause出了问题。我想检查some.log的文件长度是否小于或等于6,如果没有则再做其他事情,如果是的话。

test-clause中的双括号也不起作用。

但长期形式的测试确实有效:

test $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 && echo "yes" || echo "no"
yes

好笑,是吗?

与往常一样,感谢您提供此方面的任何提示/提示。

Christian.

3 个答案:

答案 0 :(得分:1)

试试这个(2 [和]):

[[ $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 ]] || echo "no"
^^                                                  ^^

来自bash的男人:

  

复合命令

     

...

     

[[ expression ]]

     

根据条件表达式表达式的评估,返回0或1的状态。表达式由下面在条件表达式下描述的原色组成。

我认为单个[和]不是执行测试的标准,即使它适用于我。

修改

实际上,[和]是进行测试的标准方法,它是bash中的buildin命令。如果[[...]]工作且[...]不起作用,我不会完全理解它。它可能与[和]中执行/未执行的扩展有关。

答案 1 :(得分:1)

这与您的其他问题here中的问题相同 - 您的空间为0xC2 0xA0而不是0x20。从您的问题中复制粘贴并删除:

$ echo "  echo " | hexdump -C
00000000  20 c2 a0 65 63 68 6f 20  0a                       | ..echo .|
00000009
#            ^^ ^^                                            ^^

删除并重新输入两个前导空格后:

$ echo "  echo " | hexdump -C
00000000  20 20 65 63 68 6f 20 0a                           |  echo .|
00000008
#            ^^                                               ^

答案 2 :(得分:0)

不确定为什么你的不工作

试试这个

 :>bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.


[ $( wc -l < /var/www/some.log  ) -le 6 ] || echo no
no

我希望这会有所帮助。

P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。