nerve писал(а): ↑07.10.2013 21:17
то есть, если then в той же строке, что и условие с if-ом, тогда после условия должна стоять точка с запятой.
именно так. Точка с запятой нужна тогда и только тогда, когда у вас ДВА оператора в одной строке.
это один оператор
второй оператор
ДЕЙСТВИЕ можно делать и в другой строке. Вот так:
синтаксически верно и так
тк, как вы написали -- тоже можно. Но не нужно.
И да, ДЕЙСТВИЕ должно быть. Иначе пишите так:
двоеточие == пустой оператор, который ничего не делает.
nerve писал(а): ↑07.10.2013 21:17
ленивый вариант по сути ведь тоже самое?
а это сложный вопрос. На самом деле, [ это КОМАНДА, и в man test про это не написано. А написано, что команда может быть заменена оболочкой. В man bash тоже про это не написано. Потому -- я не знаю,
как оно получится у вас. А значит, такой быдлокод лучше не писать. Впрочем -- может здешние гуру внесут ясность в этот вопрос...
nerve писал(а): ↑07.10.2013 21:17
я прочитал, что в условиях переменные обязательно надо брать в двойные кавычки. или это устаревшее требование?
синтаксис не устаревает. Лучше всего брать в одиночные, но тогда нельзя юзать переменные. Если нужны переменные, то лучше двойные, ибо иначе может получится ПУСТО. Синтаксис не терпит пустоты. Т.е. есть синтаксическая разница между ПУСТО и "".
$
$ sh x.sh
\x.sh: line 2: [: ==: ожидается использование унарного оператора
$ cat x.sh
EMPTY=
if [ $EMPTY == "" ]; then
echo "EMPTY"
fi
Но двойные кавычки исправят ситуацию.
nerve писал(а): ↑07.10.2013 21:17
хорошо что я не привел сами функции, там бы просто порвали на части за всякие ошибки
модераторы-бы потёрли тонны мата. (:
PS:
drBatty писал(а): ↑08.10.2013 12:20
\x.sh: line 2: [: ==: ожидается использование унарного оператора
в данном случае, команда
[ ждёт, что я напишу что-то типа
т.е.
унарный оператор -f проверит, является-ли filename регулярным файлом?