shell脚本中的PREFIX = $ {1:-daily}是什么意思

时间:2017-03-23 10:31:47

标签: bash shell

bash脚本中的这些声明意味着什么:

PREFIX=${1:-daily}

PROFILE=${2:-backup}

3 个答案:

答案 0 :(得分:2)

如果第一个参数存在,则将第一个参数的值分配给PREFIX变量,"每日"如果没有。

答案 1 :(得分:2)

这里的关键是要了解参数扩展${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如何将值替换为变量。

语法通常,默认情况下,您希望同时配置具有特定值的变量使其也可动态配置。

答案 2 :(得分:1)

这意味着,将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