Вопрос или проблема
Я хотел бы узнать, как писать условия if в bash скрипте в одну строку.
Например, как я могу записать это в одну строку, а затем поставить другую такую же на следующей строке?
if [ -f "/usr/bin/wine" ]; then
export WINEARCH=win32
fi
Я спрашиваю это потому, что у меня есть довольно много алиасов в моем .bashrc, и этот файл .bashrc (синхронизирован) используется на нескольких системах, но мне не нужны все алиасы на каждой из систем.
Я помещаю большинство из них внутри операторов if, и сейчас это работает замечательно, но они занимают много места, по 3 строки каждый, плюс пустая строка между ними (я люблю, когда они легко видимы).
Я также буду использовать эту технику для переменных окружения.
Вы бы могли записать это следующим образом:
if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi
Обратите внимание, что это также можно записать (как предложил @glennjackman):
[ -f "/usr/bin/wine" ] && export WINEARCH=win32
Чтобы протестировать и обработать оба условия (истинное и ложное) в одной строке, вы можете сделать это так:
[ -f "/usr/bin/wine" ] && export WINEARCH=win32 || echo "No file"
Вы также можете включить код выхода:
[ -f "/usr/bin/wine" ] && export WINEARCH=win32 || exit 1
Однако избегайте включать больше одной команды после оператора or, так как она всегда будет выполняться:
# Это всегда вернет статус выхода 1, даже если первое условие истинное
[ -f "/usr/bin/wine" ] && export WINEARCH=win32 || echo "No file" && exit 1
Я также заметил, что достаточно ввести любую сложную команду if then else, нажать Enter, а после ее выполнения просто нажать стрелку вверх. Командная строка, конечно, повторит последнюю введенную команду, но в этом случае она поставит ее всю в одну строку, как вам требуется. Это читерский способ, но он эффективен.
Если вам нужна немного большая сложность, вы можете использовать ()
для группировки операторов и детального управления операцией:
[ -f "/usr/bin/wine" ] && (grep -Exiq /usr/bin/wine || echo "Foo" >> /usr/bin/wine)
В этом случае файл /usr/bin/wine не будет создан, если он ранее не существовал, тогда как без использования ()
он будет создан.
.
Ответ или решение
Конечно! Вот подробное объяснение в ответ на вопрос о том, как записать условные операторы в Bash на одной строке.
Если вы хотите сконцентрировать условные операторы в Bash на одной строке, существует несколько способов сделать это эффективно. Вот несколько примеров.
Стандартный способ
Чтобы записать оператор if
на одной строке, используйте следующую конструкцию:
if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi
Этот метод прямолинейный, но добавляет избыточность, которая может быть удалена.
Упрощенная форма с оператором &&
Вы можете упростить запись, используя оператор &&
, который выполняет второе утверждение, если первое истинно:
[ -f "/usr/bin/wine" ] && export WINEARCH=win32
Этот подход делает код более компактным и читабельным.
Обработка обоих результатов условия
Если требуется обработать оба случая — и истинного, и ложного — используйте конструкцию:
[ -f "/usr/bin/wine" ] && export WINEARCH=win32 || echo "Файл не найден"
Включение кода возврата
Если важно использовать код возврата, это можно сделать следующим образом:
[ -f "/usr/bin/wine" ] && export WINEARCH=win32 || exit 1
Обратите внимание на порядок выполнения
Важно подчеркнуть, что при переиспользовании оператора ||
, все, что идет после него, будет выполняться, если предыдущее условие ложное. Например, следующая конструкция неверно будет выдавать код возврата 1, даже если if
условие истинно:
[ -f "/usr/bin/wine" ] && export WINEARCH=win32 || echo "Файл не найден" && exit 1
Чтобы избежать неожиданностей, используйте группу операторов ()
:
[ -f "/usr/bin/wine" ] && (команда1; команда2) || команда3
Дополнительные возможности
Для более сложных сценариев, таких как группировка нескольких команд, используйте ()
:
[ -f "/usr/bin/wine" ] && (grep -Exiq "/usr/bin/wine" || echo "Foo" >> /usr/bin/wine)
Это гарантирует, что файл /usr/bin/wine
не будет создан, если он изначально отсутствует. Увеличьте четкость и управляемость вашего кода, упрощая чтение и отладку.
Подытожим: использование условных операторов на одной строке в Bash позволяет сохранить пространство и улучшить читаемость вашего скрипта. Подходите к этому с вниманием к деталям, чтобы избежать нелогичных ошибок или нежелательных последствий.