gpt4 book ai didi

bash - VAR=${n :-m} usage in Bash

转载 作者:行者123 更新时间:2023-11-29 09:38:24 25 4
gpt4 key购买 nike

我想基于此处发布的 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

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

谢谢,

最佳答案

它设置一个默认值以防 $1 为空。

来自 3.5.3 Shell Parameter Expansion in the Bash Reference Manual :

${parameter:-word}

If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is substituted.

例子

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

根据您的评论

Thanks, @fedorqui. The original variables were POOL_SIZE=${1:-6}, REPRO_CHANCE=${2:-30}, BEST_FITS=${3:-70}. Now I am wondering if ${POOL_SIZE:-6}, ${REPRO_CHANCE:-30} and ${BEST_FITS:-70} would be the same and why is the numeration needed

如果你有

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

这是因为 POOL_SIZEREPRO_CHANCEBEST_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}? .

关于bash - VAR=${n :-m} usage in Bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19413107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com