首页 > 系统服务 > 详细

Shell 间接引用

时间:2020-05-04 10:40:59      阅读:59      评论:0      收藏:0      [点我收藏+]

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‘

 

Shell 间接引用

原文:https://www.cnblogs.com/Wshile/p/12825217.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!