Shell 间接引用

Shell 间接引用

概述

本人在研究docker官方shell脚本中发现官方一直在使用间接引用,故学习总结,作为己用。

官方脚本示例

此代码是ENV处理代码

# file_env 'MYSQL_ROOT_PASSWORD'

file_env() {
        local var="$1"
        local fileVar="${var}_FILE"
        local def="${2:-}"
        if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
                mysql_error "Both $var and $fileVar are set (but are exclusive)"
        fi
        local val="$def"
        if [ "${!var:-}" ]; then
                val="${!var}"
        elif [ "${!fileVar:-}" ]; then
                val="$(< "${!fileVar}")"
        fi
        export "$var"="$val"
        unset "$fileVar"
}

 解析

其中大量出现${!var}类似引用,自定义示例:

[root@localhost ~]# By=520
[root@localhost ~]# Wshile=By
[root@localhost ~]# echo ${Wshile}
By
[root@localhost ~]# echo ${!Wshile}
520
[root@localhost ~]# echo ${!Wshile:-}
520
[root@localhost ~]# unset Wshile
// 如果有只则输出,没有则为空
[root@localhost ~]# echo ${!Wshile:-}

 结合官方代码

#!/bin/bash

file_env() {
		local MYSQL_USER=1
		local MYSQL_USER_FILE=2
        local var="$1"
		echo "${var} ---- 1"
        local fileVar="${var}_FILE"
		echo "${fileVar} ---- 2"
        local def="${2:-}"
		echo "${!var} ---- 3"
		echo "${!fileVar} ---- 4"
        if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
                echo "error"
        fi
        local val="$def"
        if [ "${!var:-}" ]; then
                val="${!var}"
        elif [ "${!fileVar:-}" ]; then
                val="$(< "${!fileVar}")"
        fi
        export "$var"="$val"
        unset "$fileVar"
}

file_env 'MYSQL_USER'

猜你喜欢

转载自www.cnblogs.com/Wshile/p/12825217.html