这是我的代码:
#!/bin/bash
cat input$1 | ./prog$1 > output$1 && if[ "$2" != "" ]; diff output$1 expected$1;
然后发生:
$ ./run.sh
./run.sh: line 2: if[ no != ]: command not found
$
我以为我可以在一行上运行if语句?问题是什么?
答案 0 :(得分:18)
事实证明,if
和[
之间需要有空格。另外,我添加了then
和fi
个关键字。
以下工作。
#!/bin/bash
cat input$1 | ./prog$1 > output$1 && if [ "$2" != "" ]; then diff output$1 expected$1; fi
编辑:
如下面评论(以及另一个答案),这可以优雅地缩短为:
cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1
在这种情况下,我甚至不必记住有关如何使用if
构造的任何规则:)
答案 1 :(得分:3)
放弃if。 []将生成一个新的“命令”,如果使用&&&& (如果上一次退出,则运行下一步)。这里:
echo lol && [ $((10-1)) -eq 9 ] && echo math\!
和你的单行:
#!/bin/bash
cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1