shell脚本中循环的变量无法全局生效

说明

我们在编写shell脚本时,发现shell脚本中定义的while循环中定义的变量无法作用于全局,这是因为我们使用while循环时,创建了subshell,当subshell退出后,变量值就回收了。

示例

#!/bin/bash
function get_chart_list() {
    helm list | while read line
    do
           if [[ $line =~ ^test.* ]]; then
               chart=$(echo ${line#*test-*})
           fi
    done
}
get_chart_list
echo $chart

执行时,发现chart变量输出为空值。

修复方案

这里使用shell的process substitution来解决:

#!/bin/bash
function get_chart_list() {
    while read -r line
    do
           if [[ $line =~ ^test.* ]]; then
               chart=$(echo ${line#*test-*})
           fi
    done < <(helm list)
}
get_chart_list
echo $chart
posted @ 2022-08-30 16:06  yuhaohao  阅读(845)  评论(0编辑  收藏  举报