【问题标题】:: and := inside a bash parameter expansion [duplicate]: 和 := 在 bash 参数扩展中[重复]
【发布时间】:2015-05-21 05:19:31
【问题描述】:

试图理解一个用 bash 编写的 dockerfile。 : 是为了什么?

: ${WORDPRESS_DB_USER:=root}

还有:=?

我从脚本中放了更多代码供参考:

#!/bin/bash
set -e

if [ -n "$MYSQL_PORT_3306_TCP" ]; then
    if [ -z "$WORDPRESS_DB_HOST" ]; then
        WORDPRESS_DB_HOST='mysql'
    else
        echo >&2 'warning: both WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP found'
        echo >&2 "  Connecting to WORDPRESS_DB_HOST ($WORDPRESS_DB_HOST)"
        echo >&2 '  instead of the linked mysql container'
    fi
fi

if [ -z "$WORDPRESS_DB_HOST" ]; then
    echo >&2 'error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables'
    echo >&2 '  Did you forget to --link some_mysql_container:mysql or set an external db'
    echo >&2 '  with -e WORDPRESS_DB_HOST=hostname:port?'
    exit 1
fi

# if we're linked to MySQL, and we're using the root user, and our linked
# container has a default "root" password set up and passed through... :)
: ${WORDPRESS_DB_USER:=root}
if [ "$WORDPRESS_DB_USER" = 'root' ]; then
    : ${WORDPRESS_DB_PASSWORD:=$MYSQL_ENV_MYSQL_ROOT_PASSWORD}
fi
: ${WORDPRESS_DB_NAME:=wordpress}

【问题讨论】:

    标签: bash dockerfile


    【解决方案1】:

    : 只是一个什么都不做的命令。但是,该命令的参数仍会被计算。

    ${WORDPRESS_DB_NAME:=wordpress} 是一个参数扩展,用于检查 WORDPRESS_DB_NAME 是否未设置或具有空字符串作为值。如果任一为真,则为参数分配值wordpress。扩展的结果是WORDPRESS_DB_NAME 的(可能是新分配的)值。

    它们共同构成了一个通用的 shell 习惯用法,用于在变量还没有(非空)值时设置变量的值。

    一个(非 DRY)Python 等价物可能是

    try:
        if not WORDPRESS_DB_NAME:
            WORDPRESS_DB_NAME = "wordpress"
    except NameError:
        WORDPRESS_DB_NAME = "wordpress"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多