$ {2: - $ 2}这段代码做了什么

时间:2014-05-16 16:06:14

标签: bash

我在程序中忘记了一小段代码,是的,这真的很愚蠢: 这是一段代码片段。

checkInputNum(){
    if [[ $1 = *[^0-9]* ]]; then
        echo "Error: '$1' is not valid Value." >&2
        echo "Enter a value in numbers" >&2
        read input
        checkInputNum ${input}
    elif [ -z "$1" ]; then
        ${2:-$2}
        input=$2
        checkinputNum $input
    else
        input=$1
        echo ${input}
    fi
}

2 个答案:

答案 0 :(得分:3)

这是一个无操作导致无限递归。该行是iff:

[ -z "$1" ]

是真的。仅当字符串"$1"为零长度时,即没有第一个参数时,才会出现这种情况。所以也没有第二个参数。现在:

${2:-$2}
如果未设置$2,则

评估为$2!所以它默认为零长度字符串。然后“执行”该空字符串。哪个是无操作。然后你用这个“没有争论”递归地称呼你的自我。那时你的情况与首先出现的情况完全相同。你处在一个无限循环中。

答案 1 :(得分:2)

我认为它没有做任何事情。来自bash文档:

  

<强> $ {参数:-word}           使用默认值。如果参数未设置或为null,则替换单词的扩展。否则,参数的值将被替换。

在您的代码中,如果变量未设置或为null,则替换其自己的值,并且该值为空。据我所知,该行等同于:

$2

当函数有第二个参数且它不为空时,它将作为命令执行。