【问题标题】:VAR=${n:-m} usage in BashVAR=${n:-m} 在 Bash 中的用法
【发布时间】:2013-10-16 20:23:15
【问题描述】:

我想写一个基于这里发布的 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

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

谢谢,

【问题讨论】:

    标签: bash syntax


    【解决方案1】:

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

    来自3.5.3 Shell Parameter Expansion in the Bash Reference Manual

    ${parameter:-word}

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

    示例

    $ 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_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}?

    【讨论】:

    • 谢谢,@fedorqui。原始变量为 POOL_SIZE=${1:-6}、REPRO_CHANCE=${2:-30}、BEST_FITS=${3:-70}。现在我想知道 ${POOL_SIZE:-6}、${REPRO_CHANCE:-30} 和 ${BEST_FITS:-70} 是否相同,为什么需要计算。
    • @LibertadPantoja 我刚刚更新了答案,以便提供有关参数的更多信息。如果不清楚,请告诉我。
    • 现在我明白了!非常感谢! :)
    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2012-05-18
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多