Однострочный оператор if в оболочке script не работает
Это мой код:
#!/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
$
Я думал, что могу работать с операторами в одной строке? это то, что проблема?
Ответы
Ответ 1
получается, что между if
и [
должно быть пробел. Кроме того, я ввел ключевые слова then
и fi
.
Сработало следующее.
#!/bin/bash
cat input$1 | ./prog$1 > output$1 && if [ "$2" != "" ]; then diff output$1 expected$1; fi
EDIT:
как указано ниже (и в другом ответе), это можно элегантно сократить до:
cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1
и в этом случае мне даже не нужно запоминать какие-либо правила о том, как использовать конструкцию if
:)
Ответ 2
отмените if. [] будет порождать новую "команду", и вы можете запустить diff или что-то еще после того, как он выйдет с 0, используя && (бегите дальше, если предыдущие выходы в порядке). здесь:
echo lol && [ $((10-1)) -eq 9 ] && echo math\!
и ваш однострочный:
#!/bin/bash
cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1