Одна строка if оператор в bash
Я никогда не программировал в bash... тем не менее, я пытаюсь решить проблему для anchievement в игре (codingame.com)
у меня есть следующий код:
for (( i=0; i<N-1; i++ )); do
tmp=$(( sorted_array[i+1] - sorted_array[i] ));
if [ $tmp < $result ]; then result=$tmp fi
done
и эта ошибка:
/tmp/Answer.sh: line 42: syntax error near unexpected token `done'at Answer.sh. on line 42
/tmp/Answer.sh: line 42: `done' at Answer.sh. on line 42
Я хочу сравнить соседние значения моего массива и сохранить минимальную разницу между ними... но я не могу понять, как сделать оператор If в bash
3 ответов
каждая команда должна быть правильно завершена либо новой строкой, либо точкой с запятой. В этом случае вам необходимо отделить назначение result
с сайта fi
. Попробуйте добавить точку с запятой;
for (( i=0; i<N-1; i++ )); do
tmp=$(( sorted_array[i+1] - sorted_array[i] ))
if [ $tmp -lt $result ]; then result=$tmp; fi
done
кроме того, нужно использовать lt
, а не <
С <
- оператор переадресации. (Если вы не собираетесь запускать команду с именем $tmp
С вводом из файла с именем переменной $result
)
вам не хватает точки с запятой и нужно использовать -lt
вместо <
, Как отметили другие.
альтернатива if
оператор будет использовать логический и оператор &&
:
for (( i=0; i<N-1; i++ )); do
tmp=$(( sorted_array[i+1] - sorted_array[i] ))
[ $tmp -lt $result ] && result=$tmp
done
код if
должен следовать , но у вас нет такой команды. У вас есть fi
в вашем коде, но он находится в середине другой команды, поэтому он больше не завершает if
тут fi
на echo fi
будет. Если вы собираетесь объединить строки, вы должны использовать точку с запятой для разделения команд.
так рухнет
for (( i=0; i<N-1; i++ ))
do
tmp=$(( sorted_array[i+1] - sorted_array[i] ))
if [ $tmp -lt $result ]
then
result=$tmp
fi
done
вы могли бы использовать
for (( i=0; i<N-1; i++ )); do
tmp=$(( sorted_array[i+1] - sorted_array[i] ))
if [ $tmp -lt $result ]; then result=$tmp; fi
done
исключения:
do
иthen
может сопровождаться командой, поэтому вам не нужно двоеточие после них, когда вы сливаетесь в следующей строке.обратите внимание, как вам не нужно завершать свои команды с
;
?;
требуется только между командами.внутри
test
([]
),-lt
используется для сравнения чисел.