: 和 := 在 bash 参数扩展中
: and := inside a bash parameter expansion
试图理解用 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}
:
只是一个什么都不做的命令。但是,命令的参数仍然被评估。
${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"
试图理解用 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}
:
只是一个什么都不做的命令。但是,命令的参数仍然被评估。
${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"