Какая команда означает "ничего не делать" в условном в Bash?
иногда при создании условий мне нужен код, чтобы ничего не делать, например, здесь, я хочу, чтобы Bash ничего не делал, когда $a
больше, чем "10", выведите" 1", Если $a
меньше ,чем "5", в противном случае выведите"2":
if [ "$a" -ge 10 ]
then
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
это делает ошибку, хотя. Есть ли команда, которая ничего не сделает, а также не замедлит мой скрипт?
3 ответов
команда no-op в оболочке :
(двоеточие).
if [ "$a" -ge 10 ]
then
:
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
:
(двоеточие)
Не делайте ничего, кроме расширения аргументов и выполнения перенаправления. Статус возврата равен нулю.
вы, вероятно, можете просто использовать :
if [ "$a" -ge 10 ]; then
true
elif [ "$a" -le 5 ]; then
echo "1"
else
echo "2"
fi
альтернативой в вашем примере (но не обязательно везде) является переупорядочение вашего if / else:
if [ "$a" -le 5 ]; then
echo "1"
elif [ "$a" -lt 10 ]; then
echo "2"
fi
хотя я не отвечаю на исходный вопрос, соглашаясь с командой no-op, многие (если не большинство) проблем, когда можно подумать "в этой отрасли я ничего не должен делать" можно обойти, просто реструктуризация логика так что эта ветка не произойдет.
Я пытаюсь дать общее правило, используя пример OPs
ничего не делать, когда $a больше, чем "10", печать "1", Если $a меньше, чем "5", в противном случае, печать "2"
мы должны избегать филиала, где $a
получает более 10, так что $a < 10
как общее условие можно приложить к каждому другому, следовать условием.
в общих чертах, когда вы говорите ничего не делать, когда X, тогда перефразируйте его как избегайте ветки, где X. Обычно вы можете избежать этого, просто отрицая X и применяя его ко всем другим условиям.
таким образом, пример OPs с примененным правилом может быть реструктурировано как:
if [ "$a" -lt 10 ] && [ "$a" -le 5 ]
then
echo "1"
elif [ "$a" -lt 10 ]
then
echo "2"
fi
просто вариация вышесказанного, заключая все в $a < 10
состояние:
if [ "$a" -lt 10 ]
then
if [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi
fi
(для этого конкретного примера @Flimzys реструктуризация конечно лучше, но я хотел дать общее правило для всех людей, которые ищут, как ничего не делать.)