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'
    
    加油,你们是最棒的!
  • 相关阅读:
    C和C++内存模型
    makefile 学习归纳
    为知笔记给你更多
    二级指针探讨
    使用vscode书写博客
    C/C++ 笔试题一
    从一段经典错误代码说起——关于局部变量指针和函数传参的问题分析
    socket编程再分析(-)——基础
    samba服务器配置
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />详解
  • 原文地址:https://www.cnblogs.com/Wshile/p/12825217.html
Copyright © 2011-2022 走看看