我试图写出一个脚本,它将自动执行一项更乏味的任务。我几乎把所有东西都搞砸了,可以让代码的各个组件按照我的意愿去做,但是我在尝试让if语句工作时遇到了麻烦。这就是我要做的事情:
if [ ack --ignore-case 'foo' ]; then
Do this action
else
Do that action
fi
截至目前,它始终执行else操作,即使ack参数为true。
谢谢!
答案 0 :(得分:3)
只需放下方括号
即可if ack --ignore-case 'foo' ; then
Do this action
else
Do that action
fi
您不想检查字符串ack --ignore-case 'foo'
是否为空,您想检查确认退出状态。
你应该收到警告告诉你:
-bash: [: --ignore-spaces: binary operator expected
答案 1 :(得分:2)
删除[
- 您要检查确认的退出状态:
if ack --ignore-case 'foo'; then
如果遇到匹配,ack返回0(成功)退出状态。
虽然它可能看起来像一个语法结构,但[
实际上是一个函数(与test
同义),如果测试通过则返回0。 if
正在查看此函数的返回码。在这种情况下,ack会为您提供所需的返回代码,因此您也不应该使用[
。