shell参数替换

${parameter-default}, ${parameter:-default}

如果变量没有被设置,使用默认值。

1
2
echo ${username-`whoami`}
# 如果变量$username还没有被设置,则把命令`whoami`的结果赋给该变量.

${parameter-default}${parameter:-default}几乎是相等的。它们之间的差别是:当一个参数已被声明,但是值是NULL的时候两者不同.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/bin/bash
# param-sub.sh
# 变量是否被声明,
#+ 即使它的值是空的(null)
#+ 也会影响是否使用默认值.
username0=
echo "username0 has been declared, but is set to null."
echo "username0 = ${username0-`whoami`}"
# 不会有输出.
echo
echo username1 has not been declared.
echo "username1 = ${username1-`whoami`}"
# 会输出默认值.
username2=
echo "username2 has been declared, but is set to null."
echo "username2 = ${username2:-`whoami`}"
# ^
# 和上面一个实例比较.
# 有输出是因为:-比-多一个测试条件.
#
# 再来一次:
variable=
# 变量已声明,但被设置了空值(null).
echo "${variable-0}" # (没有输出)
echo "${variable:-1}" # 1
# ^
unset variable
echo "${variable-2}" # 2
echo "${variable:-3}" # 3
exit 0

默认值结构可以在脚本中提供一个没有传递命令行参数时的默认值.

1
2
3
DEFAULT_FILENAME=generic.data
filename=${1:-$DEFAULT_FILENAME}
# 如果没有指定值,下面的代码会使用filename变量的默认值"generic.data".

${parameter=default},${parameter:=default}

两种形式几乎相同,和上面的一样

${parameter+alt_value},${parameter:+alt_value}

如果变量parameter设置,使用alt_value作为新值,否则使用空字符串
除了引起的当变量被声明且值是空值时有些不同外,两种形式几乎相等。

${parameter?err_msg}, ${parameter:?err_msg}

如果变量parameter已经设置,则使用该值,否则打印err_msg错误信息
这两种形式几乎相同,仅有和上面所说的一点不同:带有:使当变量已声明但值是空值时不同.

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器