在bash中,冒号破折号“:-”代表什么意思?

82

经过一些试错之后,结果是我们所期望的。我不明白"2:-"和"3:-"是做什么/意味着什么。有人可以解释一下吗?

#!/bin/bash
pid=$(ps -ef | grep java | awk ' NR ==1 {print $2}')

count=${2:-30}  # defaults to 30 times
delay=${3:-10} # defaults to 10 second
mkdir $(date +"%y%m%d")
folder=$(date +"%y%m%d")
while [ $count -gt 0 ]
do
    jstack $pid >./"$folder"/jstack.$(date +%H%M%S.%N)
    sleep $delay
    let count--
    echo -n "."
done

2
请查找${string:position:length},详见http://tldp.org/LDP/abs/html/string-manipulation.html。 - Marc B
5
你不明白,Marc B。 - Gilles Quénot
4
这个问题更有用,因为谷歌无法搜索它。 - Sandeep Jindal
1个回答

113

这是一个参数扩展,它的意思是如果第三个参数为空或未设置,则用冒号后面的内容替换它

$ x=
$ echo ${x:-1}
1
$ echo $x

$

还有另一个类似的 PE,如果变量为空,则分配该值:

$ x=
$ echo ${x:=1}
1
$ echo $x
1

请查看http://wiki.bash-hackers.org/syntax/pe


3
谢谢您的解释,sputnick。 - Stelios
2
与其说“void”,更准确的说法是“未设置或为空”。 - chepner
链接已失效(可能是暂时的)- 这里有一个镜像:https://github.com/rawiriblundell/wiki.bash-hackers.org/blob/main/syntax/pe.md#use-a-default-value - Colin Pickard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接