Одна строка 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используется для сравнения чисел.