【问题标题】:What means PREFIX=${1:-daily} in shell script [duplicate]shell脚本中的PREFIX = $ {1:-daily}是什么意思[重复]
【发布时间】:2017-08-15 20:32:05
【问题描述】:

bash 脚本中的这些声明是什么意思:

PREFIX=${1:-daily}

PROFILE=${2:-backup}

【问题讨论】:

  • 你试过运行它们并自己理解吗?
  • 全部在 man bash 内 - 打开后只需输入 /\:-

标签: bash shell


【解决方案1】:

如果第一个参数存在,则将第一个参数的值分配给 PREFIX 变量,如果不存在,则为“每日”。

【讨论】:

    【解决方案2】:

    这里的关键是理解这里的Parameter-Expansion ${PARAMETER:-WORD}语法是什么意思,

    ${PARAMETER:-WORD}
    
    If the parameter PARAMETER is unset (never was defined) or null (empty), this one
    expands to WORD, otherwise it expands to the value of PARAMETER, as if it
    just was ${PARAMETER}
    

    在您的情况下,${PARAMETER} 是传递给函数或脚本的位置参数,

    使用下面的脚本更好地理解,

    myTestFunction() {
        PREFIX=${1:-daily}
        PROFILE=${2:-backup}
    
        printf "PREFIX value %s PROFILE value %s\n" "$PREFIX" "$PROFILE"
    }
    
    myTestFunction "some" "junk"
    myTestFunction
    

    产生的结果为

    $ bash script.sh
    PREFIX value some PROFILE value junk
    PREFIX value daily PROFILE value backup
    

    另见脚本的扩展调试器版本

    $ bash -x script.sh
    + myTestFunction some junk
    + PREFIX=some
    + PROFILE=junk
    + printf 'PREFIX value %s PROFILE value %s\n' some junk
    PREFIX value some PROFILE value junk
    + myTestFunction
    + PREFIX=daily
    + PROFILE=backup
    + printf 'PREFIX value %s PROFILE value %s\n' daily backup
    PREFIX value daily PROFILE value backup
    

    $1$2 未传递时,shell 如何将值替换为变量。

    语法一般在你想配置一个具有特定值的变量时使用同时使其也可以动态配置。

    【讨论】:

      【解决方案3】:

      这意味着,分配the first argument(如果存在),否则将daily分配给变量PREFIX并分配the second argument(如果存在),否则将backup分配给变量PROFILE

      例如:

      $ cat file.sh
      #!/bin/bash
      
      PREFIX=${1:-daily}
      PROFILE=${2:-backup}
      
      echo $PREFIX
      echo $PROFILE
      

      对于给定的以下命令行参数,输出将类似于:

      $ ./file.sh
      daily
      backup
      
      $ ./file.sh abc
      abc
      backup
      
      $ ./file.sh abc xyz
      abc
      xyz
      

      【讨论】:

        猜你喜欢
        • 2013-04-08
        • 1970-01-01
        • 2015-05-29
        • 2010-12-25
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 2017-04-17
        • 2018-05-11
        相关资源
        最近更新 更多