我在程序中忘记了一小段代码,是的,这真的很愚蠢: 这是一段代码片段。
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
}
答案 0 :(得分:3)
这是一个无操作导致无限递归。该行是iff:
[ -z "$1" ]
是真的。仅当字符串"$1"
为零长度时,即没有第一个参数时,才会出现这种情况。所以也没有第二个参数。现在:
${2:-$2}
如果未设置$2
,则评估为$2
!所以它默认为零长度字符串。然后“执行”该空字符串。哪个是无操作。然后你用这个“没有争论”递归地称呼你的自我。那时你的情况与首先出现的情况完全相同。你处在一个无限循环中。
答案 1 :(得分:2)
我认为它没有做任何事情。来自bash
文档:
<强> $ {参数:-word} 强> 使用默认值。如果参数未设置或为null,则替换单词的扩展。否则,参数的值将被替换。
在您的代码中,如果变量未设置或为null,则替换其自己的值,并且该值为空。据我所知,该行等同于:
$2
当函数有第二个参数且它不为空时,它将作为命令执行。