【发布时间】:2017-08-15 20:32:05
【问题描述】:
bash 脚本中的这些声明是什么意思:
PREFIX=${1:-daily}
PROFILE=${2:-backup}
【问题讨论】:
-
你试过运行它们并自己理解吗?
-
全部在
man bash内 - 打开后只需输入/\:-
bash 脚本中的这些声明是什么意思:
PREFIX=${1:-daily}
PROFILE=${2:-backup}
【问题讨论】:
man bash 内 - 打开后只需输入 /\:-
如果第一个参数存在,则将第一个参数的值分配给 PREFIX 变量,如果不存在,则为“每日”。
【讨论】:
这里的关键是理解这里的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 如何将值替换为变量。
语法一般在你想配置一个具有特定值的变量时使用同时使其也可以动态配置。
【讨论】:
这意味着,分配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
【讨论】: