Bash Days | Linux | DevOps
23.3K subscribers
149 photos
25 videos
675 links
Авторский канал от действующего девопса

Самобытно про разработку, devops, linux, скрипты, сисадминство, техдирство и за айтишную жизу.

Автор: Роман Шубин
Реклама: @maxgrue

MAX: https://max.ru/bashdays

Курс: @tormozilla_bot
Блог: https://bashdays.ru
Download Telegram
Вопрос с LF, думаю всем полезно будет.

Пишу пайплайн, есть такая конструкция:

platform=$(uname -m)
docker run --platform linux/arm64


Я бы хотел, чтобы параметр --platform linux/arm64 подставлял в том случае, если архитектура платформы == arm64, в других случаях этот параметр подставлять не нужно.

Делаю так, но получается какая-то хуйня:

platform=$(uname -m)
docker run ${platform/arm64/--platform linux/arm64}


Короче смотри. Задачку можно решить несколькими способами.

Способ 1. Заточен под Bash:

platform=$(uname -m)
docker run $([[ $platform = arm64 ]] && echo "--platform linux/arm64")


Этот способ не сработает, если код запустится в /bin/sh, потому что оно не POSIX. Тут уже смотри под чем все это будет запускаться.

Тут можешь почитать чем отличаются [[ ]] от []
А тут что такое POSIX


Способ 2. Универсальный:

platform=$(uname -m)
docker run $( [ "$platform" = "arm64" ] && echo "--platform linux/arm64" )


На 100 % POSIX-совместим. По функционалу эти способы идентичны.

Ну и по итогу имеем:

[[ ... ]] — это расширенная bash-версия, безопаснее и гибче (поддержка pattern, безопасность кавычек при пробелах и пустых строках, поддежка логики с &&)

[ ... ] — POSIX-совместимая, более строгая и требующая аккуратности с кавычками.

Ну и твои варианты приветствуются, поделись в комментах, глядишь что-то маст-хевное у тебя в загашнике есть.

🛠 #bash #pipeline

💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Please open Telegram to view this post
VIEW IN TELEGRAM
145