我想基于这里发布的一个bash编写遗传算法:http://father-natures.blogspot.mx/2013/04/implementing-genetic-algorithm-in-bash.html.我在提前编写脚本时非常不熟悉,而且我不知道VAR = $ {n:-m}代表什么.我的猜测是这样的:
POOL_SIZE=${1:-6}
Run Code Online (Sandbox Code Playgroud)
使$ 1 = -6,但是当我检查$ 1时它是空的,当我检查$ POOLSIZE时我得到6.
libertad@engrane4:~$ echo "POOL_SIZE"
6
Run Code Online (Sandbox Code Playgroud)
这让我很困惑.如果我希望变量为6,我会写:
POOL_SIZE=6
Run Code Online (Sandbox Code Playgroud)
你能告诉我我错过了什么(这个任务还有什么用)?
谢谢,
如果$1为空则设置默认值.
$ {参数:-word}
如果参数未设置或为null,则替换单词的扩展.否则,参数的值将被替换.
$ echo ${a:-"hello"}
hello
$ a="test"
$ echo ${a:-"hello"}
test
Run Code Online (Sandbox Code Playgroud)
谢谢,@ 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}
Run Code Online (Sandbox Code Playgroud)
这是因为POOL_SIZE,REPRO_CHANCE并且BEST_FITS都应该包含的价值$1,$2和$3.Any $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"
Run Code Online (Sandbox Code Playgroud)
然后用不同数量的参数执行它将产生:
$ ./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
Run Code Online (Sandbox Code Playgroud)
我希望它能说清楚.
还要注意${var:-value}并且${var-value}不一样:$ {var:-word}和$ {var-word}之间有什么区别?.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |