bash参数扩展${parameter:-SUB}vs${parameter SUB}
我看到一些bash脚本(在gnubash上,版本3.2.51(1))带有如下参数替换bash参数扩展${parameter:-SUB}vs${parameter SUB},bash,Bash,我看到一些bash脚本(在gnubash上,版本3.2.51(1))带有如下参数替换 function foo() { local x=${1-XYZ} ##### (1) echo "x=${x}." } foo ####### this prints x=XYZ foo ABCD ###### this prints x=ABCD 更常见的是我在(1)x=${1:-XYZ}中看到,我可以在Bash参考页中找到它。两者都是正确的,还是背景中也发生了其他事情,在某些情况下可能会失败
function foo() {
local x=${1-XYZ} ##### (1)
echo "x=${x}."
}
foo ####### this prints x=XYZ
foo ABCD ###### this prints x=ABCD
更常见的是我在(1)x=${1:-XYZ}
中看到,我可以在Bash参考页中找到它。两者都是正确的,还是背景中也发生了其他事情,在某些情况下可能会失败
它不必是$1
-只要${XX sub}
中的变量未定义,它就会选择替代项。
非常感谢如果未设置
值
,请使用默认值
,否则,请使用值
:
var=${value-$default}
var=${value:-$default} # ':' use default even if value declared and empty/null
e、 g(缺少命令行参数):
如果未设置
值
,请使用默认值
,否则,请使用值
:
var=${value-$default}
var=${value:-$default} # ':' use default even if value declared and empty/null
e、 g(缺少命令行参数):
不同之处在于,
-
在参数未设置(即未定义)时使用备用值,:-
在参数未设置或为空(即设置为空字符串)时使用备用值。例如:
$ foo() {
> echo "Argument 1 with :- is '${1:-altval}', with just - is '${1-altval}'"
> echo "Argument 2 with :- is '${2:-altval}', with just - is '${2-altval}'"
> }
$ foo ""
Argument 1 with :- is 'altval', with just - is ''
Argument 2 with :- is 'altval', with just - is 'altval'
在这里,我向函数传递了一个(空)参数,因此
$1
被设置为null,但$2
未设置。区别在于-
在参数未设置(即未定义)时使用备用值,:-
使用未设置或null(即设置为空字符串)。例如:
$ foo() {
> echo "Argument 1 with :- is '${1:-altval}', with just - is '${1-altval}'"
> echo "Argument 2 with :- is '${2:-altval}', with just - is '${2-altval}'"
> }
$ foo ""
Argument 1 with :- is 'altval', with just - is ''
Argument 2 with :- is 'altval', with just - is 'altval'
在这里,我向函数传递了一个(空)参数,因此
$1
设置为null,但$2
未设置。${var word}
如果var
未定义,则返回“word”。如果不是,则返回${var}。
${var:-word}
如果var
为空或未定义,则返回“word”。如果不是,则返回${var}
您可以使用此示例脚本轻松检查差异
#!/bin/bash
var1="" ## var1 is Null
#var2= ## var2 is undefined
var3="value3" ## var3 is set
echo '${var1}': ${var1} "(NULL)"
echo '${var2}': ${var2} "(Undefined)"
echo '${var3}': ${var3}
echo '${var1-foo}': ${var1-foo}
echo '${var2-foo}': ${var2-foo}
echo '${var3-foo}': ${var3-foo}
echo '${var1:-foo}': ${var1:-foo}
echo '${var2:-foo}': ${var2:-foo}
echo '${var3:-foo}': ${var3:-foo}
此脚本输出
${var1}: (NULL)
${var2}: (Undefined)
${var3}: value3
${var1-foo}:
${var2-foo}: foo
${var3-foo}: value3
${var1:-foo}: foo
${var2:-foo}: foo
${var3:-foo}: value3
${var word}
如果var
未定义,则返回“word”。如果不是,则返回${var}。
${var:-word}
如果var
为空或未定义,则返回“word”。如果不是,则返回${var}
您可以使用此示例脚本轻松检查差异
#!/bin/bash
var1="" ## var1 is Null
#var2= ## var2 is undefined
var3="value3" ## var3 is set
echo '${var1}': ${var1} "(NULL)"
echo '${var2}': ${var2} "(Undefined)"
echo '${var3}': ${var3}
echo '${var1-foo}': ${var1-foo}
echo '${var2-foo}': ${var2-foo}
echo '${var3-foo}': ${var3-foo}
echo '${var1:-foo}': ${var1:-foo}
echo '${var2:-foo}': ${var2:-foo}
echo '${var3:-foo}': ${var3:-foo}
此脚本输出
${var1}: (NULL)
${var2}: (Undefined)
${var3}: value3
${var1-foo}:
${var2-foo}: foo
${var3-foo}: value3
${var1:-foo}: foo
${var2:-foo}: foo
${var3:-foo}: value3