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