由于变量范围而引起的问题-该值未更改while循环

时间:2018-08-21 12:24:46

标签: unix

ScriptPath=$(dirname $0)
Userlist=${ScriptPath}/Config_Userlist.csv

user="hive"
export flag=0
sed 1d $Userlist | while read user_list
do

if [[ "$user_list" != "$user" ]]; then
flag=1
fi
done 

echo $flag

如果条件通过,flag的值将变为1。但是,当我在while循环之后获取该变量时,它再次为零。它不是在更新更改的值。

1 个答案:

答案 0 :(得分:0)

管道创建子外壳,子外壳无法修改其父级中的变量。

如果您的外壳支持进程替换,则可以使用以下方式代替使用sed并将其通过管道传递到while

while read user_list do;
    ... # all the same stuff you have in your loop
done < <(sed 1d "$Userlist")

,然后while将在原始外壳中运行,您可以设置flag