我无法理解为什么 userType 没有改变。
我确定它已成功达到 determineType ,但在我稍后尝试打印 userType 时,它并未将值更改为“bbb”。
userType="aaa"
function determineType {
userType="bbb"
}
function checkUser {
cat users.csv | \
while read userLine; do
if [[ $userLine =~ .*$user.* ]]
then
determineType
echo "1"
fi
done
echo "0"
}
答案 0 :(得分:2)
你正在使用一个管道,它启动while ..在子shell中执行。 更改子shell中变量的值不会影响原始变量
你应该替换:
function checkUser {
cat users.csv | \
while read userLine; do
if [[ $userLine =~ .*$user.* ]]
then
determineType
echo "1"
fi
done
echo "0"
}
与
function checkUser {
while read userLine; do
if [[ $userLine =~ .*$user.* ]]
then
determineType
echo "1"
fi
done < users.csv
echo "0"
}
(这也消除了无用的猫)
答案 1 :(得分:2)
正如soulseekah在评论中所说,你的while
循环在子shell中执行。相反,做(并且,作为一种好处,你摆脱了无用的猫):
userType="aaa"
determineType() {
userType="bbb"
}
checkUser() {
while read userLine; do
if [[ $userLine = *$user* ]]; then
determineType
return 1
fi
done < users.csv
return 0
}
注意。我也改变了一些事情:
return
代替echo
来返回值:您使用echo
再次遇到同样的问题:您可能会在另一个子shell中使用您的函数checkUser来获取echo
返回的值。