我想基于这里发布的一个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
你能告诉我我错过了什么(这个任务还在做什么)?
谢谢,
答案 0 :(得分:7)
如果$1
为空,则设置默认值。
来自3.5.3 Shell Parameter Expansion in the Bash Reference Manual:
<强> $ {参数:-word} 强>
如果参数未设置或为null,则替换单词的扩展。 否则,参数的值将被替换。
$ 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
和BEST_FITS
应该包含$1
,$2
和$3
的值。任何$n
表示nth
参数,例如来自脚本。所以如果你有以下脚本:
$ 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}
不一样:What is the difference between ${var:-word} and ${var-word}?。