在sh中对字符串的条件赋值

时间:2019-01-08 19:59:48

标签: bash docker sh

我正在为一堆图像写一个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 :(得分:2)

它有些重复,但是将适用于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

在功能更强大的Shell中,您将使用数组而不是位置参数,但是POSIX Shell尚不需要对数组的支持。

如果脚本已经在使用位置参数,则需要做一些额外的工作。或者,您可以定义一个函数(具有自己的位置参数集),该函数除保存其他任何参数外,还始终保存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

答案 1 :(得分:0)

以下代码可能会帮助

strParams="AA BB CC DD"

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

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

答案 2 :(得分:0)

您可以这样使用它:

docker save AA BB CC DD $( [[ $EE_flag = true ]] && echo "EE" ) |
gzip -o single-tarball.tar.gz