2

我想写一个基于这里发布的 bash 的遗传算法:http: //father-natures.blogspot.mx/2013/04/implementing-genetic-algorithm-in-bash.html。我在预先编写脚本方面非常不熟练,我不明白 VAR=${n:-m} 代表什么。我的猜测是:

POOL_SIZE=${1:-6}

使 $1=-6,但是当我检查 $1 时它是空的,当我检查 $POOLSIZE 时我得到 6。

libertad@engrane4:~$ echo "POOL_SIZE"
6

这让我很困惑。如果我希望变量为 6,我会写:

POOL_SIZE=6

你能告诉我我错过了什么(这个作业还有什么作用)?

谢谢,

4

1 回答 1

7

$1如果为空,它会设置默认值。

来自Bash 参考手册中的 3.5.3 Shell 参数扩展

${参数:-字}

如果参数未设置或为空,则替换单词的扩展。否则,参数的值被替换。

例子

$ echo ${a:-"hello"}
hello
$ a="test"
$ echo ${a:-"hello"}
test

根据您的评论

谢谢,@fedorqui。原始变量为 POOL_SIZE=${1:-6}、REPRO_CHANCE=${2:-30}、BEST_FITS=${3:-70}。现在我想知道 ${POOL_SIZE:-6}、${REPRO_CHANCE:-30} 和 ${BEST_FITS:-70} 是否相同,为什么需要计算

如果你有

POOL_SIZE=${1:-6}
REPRO_CHANCE=${2:-30}
BEST_FITS=${3:-70}

这是因为POOL_SIZE和应该包含REPRO_CHANCE和的值。Any表示参数,例如来自脚本。因此,如果您有以下脚本:BEST_FITS$1$2$3$nnth

$ cat a
#!/bin/bash

POOL_SIZE=${1:-6}
REPRO_CHANCE=${2:-30}
BEST_FITS=${3:-70}

echo "POOL_SIZE=$POOL_SIZE"
echo "REPRO_CHANCE=$REPRO_CHANCE"
echo "BEST_FITS=$BEST_FITS"

然后使用不同数量的参数执行它会产生:

$ ./a
POOL_SIZE=6
REPRO_CHANCE=30
BEST_FITS=70

$ ./a 2 2 2
POOL_SIZE=2
REPRO_CHANCE=2
BEST_FITS=2

$ ./a 24 2
POOL_SIZE=24
REPRO_CHANCE=2
BEST_FITS=70

我希望它说清楚。


还要注意${var:-value}${var-value}不一样:${var:-word} 和 ${var-word} 有什么区别?.

于 2013-10-16T20:25:14.593 回答