代码之家  ›  专栏  ›  技术社区  ›  P i

使用表创建自定义环境变量集

  •  0
  • P i  · 技术社区  · 5 年前

    管道的不同部分需要不同的子集。

    timestamp=01-02-03T04:05
    version=1.2.3
    
    table='
    VAR_NAME   DJANGO_ENV   K8S_ENV
    timestamp  ✅           ✅
    version    ✅           ⛔️
    '
    

    现在我想填充 DJANGO_ENV 和 K8S_ENV

    DJANGO_ENV="timestamp=01-02-03T04:05 version=1.2.3"
    K8S_ENV="timestamp=01-02-03T04:05"
    

    ... 这样我就可以跑了 $K8S_ENV create_k8s_infra

    怎么做?

    1 回复  |  直到 5 年前
        1
  •  0
  •   P i    5 年前
    timestamp=01-02-03T04:05
    version=1.2.3
    
    table='
    VAR_NAME   DJANGO_ENV   K8S_ENV
    timestamp  ✅           ✅
    version    ✅           ⛔️
    '
    
    {
        read -r # first line is blank
        read -r first_nonblank_line
        read -r -a env_names <<< "$first_nonblank_line"
        echo "Env-names: ${env_names[@]}"
    
        while read -r line; do 
            if [[ -n $line ]]; then
                echo
                echo "line=$line"
    
                read -r -a arr <<< "$line"
    
                nCols=${#arr[@]}
    
                var_name=${arr[0]}
    
                for (( i=1; i<${nCols}; i++ )); do
                    echo "    Col#${i} "
                    if [[ ${arr[i]} == "✅" ]]; then
                        env_name=${env_names[i]}
                        echo "    Adding $var_name to $env_name"
                        printf -v "$env_name" '%s' "${!env_name} $var_name=\"${!var_name}\""
                    fi
                done
            fi
        done
    } <<< "$table"
    
    echo "DJANGO_ENV: $DJANGO_ENV"
    echo "K8S_ENV: $K8S_ENV"
    

    输出:

    > ./table.sh 
    Env-names: VAR_NAME DJANGO_ENV K8S_ENV
    
    line=timestamp  ✅           ✅
        Col#1 
        Adding timestamp to DJANGO_ENV
        Col#2 
        Adding timestamp to K8S_ENV
    
    line=version    ✅           ⛔️
        Col#1 
        Adding version to DJANGO_ENV
        Col#2 
    DJANGO_ENV:  timestamp=01-02-03T04:05 version=1.2.3
    K8S_ENV:  timestamp=01-02-03T04:05
    
        2
  •  0
  •   Himanshu Tanwar    5 年前

    试用评估:

    eval $K8S_ENV create_k8s_infra
    

    eval $K8S_ENV
    create_k8_infra
    

    (可能第一次没有工作的原因: here

    也可以直接使用printf来填充变量,而不是使用printf:

    timestamp=01-02-03T04:05
    version=1.2.3
    
    table='
    VAR_NAME   DJANGO_ENV   K8S_ENV
    timestamp  ✅           ✅
    version    ✅           ⛔️
    '
    
    {
        read -r # first line is blank
        read -r first_nonblank_line
        read -r -a env_names <<< "$first_nonblank_line"
        echo "Env-names: ${env_names[@]}"
    
        while read -r line; do 
            if [[ -n $line ]]; then
                echo
                echo "line=$line"
    
                read -r -a arr <<< "$line"
    
                nCols=${#arr[@]}
    
                var_name=${arr[0]}
    
                for (( i=1; i<${nCols}; i++ )); do
                    echo "    Col#${i} "
                    if [[ ${arr[i]} == "✅" ]]; then
                        echo "    Adding $var_name to ${env_names[i]}"
                        eval ${env_names[i]}=\"\${${env_names[i]}} $var_name=\"${!var_name}\"\"
                    fi
                done
            fi
        done
    } <<< "$table"
    
    echo "DJANGO_ENV: $DJANGO_ENV"
    echo "K8S_ENV: $K8S_ENV"