代码之家  ›  专栏  ›  技术社区  ›  Psyduck

将条件赋值给sh中的字符串

  •  1
  • Psyduck  · 技术社区  · 6 年前

    我正在写一篇文章 docker save 一堆图片的声明。还有一个图像,我只想在某个标志设置为真时保存它。

    我在提议这样的事

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

    但失败的原因是 码头工人储蓄 只需要一些字符串作为参数,而不是if/else语句。我试过三元运算符 ? : 但它似乎只对数值有效。

    在上海有什么技巧可以做到这一点吗?

    3 回复  |  直到 6 年前
        1
  •  0
  •   anubhava    6 年前

    您可以这样使用它:

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

    这有点重复,但会适用于所有可能的论点 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还不需要对数组的支持。

    如果脚本已经在使用位置参数,则需要做一些额外的工作。或者,您可以定义一个函数(它有自己的位置参数集),它除了保存任何其他参数外,还始终保存a a、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
    
        3
  •  0
  •   Derviş Kayımbaşıoğlu    6 年前

    下面的代码可能有帮助

    strParams="AA BB CC DD"
    
    if [[ $EE_flag = true ]]; then
        strParams="$strParams EE"
    fi
    
    docker save $strParams | gzip -o single-tarball.tar.gz
    
    推荐文章