условное присвоение строки в sh - PullRequest
0 голосов
/ 08 января 2019

Я пишу docker save оператор для набора изображений. И есть одно изображение, которое я хочу сохранить, только когда для определенного флага установлено значение true.

Я предлагаю что-то вроде этого

#!/bin/sh
docker save AA BB CC DD
  if [ "${EE_flag}" = true ]; then
    EE
  fi
       | gzip -o single-tarball.tar.gz

Но это не удалось, потому что docker save действительно ожидает только некоторую строку в качестве аргументов, а не оператор IF / ELSE. Я пробовал троичный оператор ? :, но, похоже, он работает только для числовых значений.

Есть ли какие-нибудь трюки в sh, чтобы сделать это?

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Вы можете использовать это так:

docker save AA BB CC DD $( [[ $EE_flag = true ]] && echo "EE" ) |
gzip -o single-tarball.tar.gz
0 голосов
/ 09 января 2019

Это несколько повторяется, но будет работать для всех возможных аргументов docker save:

if [ "${EE_flag}" = true ]; then
  docker save AA BB CC DD EE
else
  docker save AA BB CC DD
fi | gzip -o single-tarball.tar.gz

Чтобы уменьшить восприимчивость, вы можете использовать позиционные параметры скрипта.

set -- AA BB CC DD
[ "${EE_flag}" = true ] && set -- "$@" EE
docker save "$@" | gzip -o single-tarball.tar.gz

В более мощной оболочке вы бы использовали массив вместо позиционных параметров, но оболочка POSIX пока не требует поддержки массивов.

Некоторая дополнительная работа требуется, если скрипт уже использует позиционные параметры. Или вы можете определить функцию (которая имеет свой собственный набор позиционных параметров), которая всегда сохраняет AA, BB, CC, DD в дополнение к любым другим аргументам.

ds () { docker save AA BB CC DD; }
if [ "${EE_flag}" = true; then
  ds
else
  ds EE
fi | gzip -o single-tarball.tar.gz
0 голосов
/ 08 января 2019

Следующий код может помочь

strParams="AA BB CC DD"

if [[ $EE_flag = true ]]; then
    strParams="$strParams EE"
fi

docker save $strParams | gzip -o single-tarball.tar.gz
...