Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash参数扩展${parameter:-SUB}vs${parameter SUB}_Bash - Fatal编程技术网

bash参数扩展${parameter:-SUB}vs${parameter SUB}

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参考页中找到它。两者都是正确的,还是背景中也发生了其他事情,在某些情况下可能会失败

我看到一些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参考页中找到它。两者都是正确的,还是背景中也发生了其他事情,在某些情况下可能会失败

它不必是
$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