2015-05-20 2 views
2

Попытка понять файл докеров, написанный в bash. Что такое: для?: and: = внутри расширения параметра bash

: ${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} 

ответ

3

: просто команда, которая ничего не делает. Однако аргументы для команды все еще оцениваются.

${WORDPRESS_DB_NAME:=wordpress} - это расширение параметра, которое проверяет, отменен ли WORDPRESS_DB_NAME или имеет пустую строку для значения. Если значение true, параметру присваивается значение wordpress. Результатом расширения является тогда (возможно, вновь назначенное) значение WORDPRESS_DB_NAME.

Вместе они образуют общую идиому оболочки для установки значения переменной, если она еще не имеет (не нулевого) значения.

А (без СУХОЙ) Python может быть эквивалентно

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