zoukankan      html  css  js  c++  java
  • 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'
    
    加油,你们是最棒的!
  • 相关阅读:
    Nginx有哪些作用?
    MYSQL如何优化?
    jdk1.8新特性
    [javase基础] JDK JRE JVM的区别?
    JDBC中如何进行事务处理?
    JDBC、ibatis(mybatis)、Hibernate有什么不同?
    java面试题最容易犯错
    Spring高频率面试题
    python pip whl安装和使用
    深入理解 Linux的进程,线程,PID,LWP,TID,TGID
  • 原文地址:https://www.cnblogs.com/Wshile/p/12825217.html
Copyright © 2011-2022 走看看