Какая команда означает" ничего не делать " в условном в Bash?



иногда при создании условных обозначений мне нужен код, чтобы ничего не делать, например, здесь я хочу, чтобы Bash ничего не делал, когда $a больше ,чем" 10", выведите" 1", Если $a меньше, чем "5", в противном случае выведите"2":



if [ "$a" -ge 10 ]
then
elif [ "$a" -le 5 ]
then
echo "1"
else
echo "2"
fi


Это делает ошибку, хотя. Есть ли команда, которая ничего не будет делать, а также не замедляет мой скрипт?

706   3  

3 ответов:

команда no-op в оболочке : (двоеточие).

if [ "$a" -ge 10 ]
then
    :
elif [ "$a" -le 5 ]
then
    echo "1"
else
    echo "2"
fi

С bash manual:

: (двоеточие)
Не делайте ничего, кроме расширения аргументов и выполнения перенаправления. Статус возврата равен нулю.

вы, вероятно, можете просто использовать :

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 реструктуризация конечно лучше, но я хотел дать общее правило для всех людей, которые ищут, как ничего не делать.)

Comments

    Ничего не найдено.