gpt4 book ai didi

linux - Bash 脚本变量作用域问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:22 25 4
gpt4 key购买 nike

username="hello"
password="3333"

function login {
# 1 - Username
# 2 - Password
match=0
cat LoginsMaintMenu.txt | while read line; do
x=`echo $line | awk '{print $1}'`
y=`echo $line | awk '{print $2}'`
if [ "${x}" == "${1}" ] && [ "${y}" == "${2}" ]; then
echo "match"
match=1
echo $match
break
fi
done
echo $match
return $match
}

echo $username $password
login ${username} ${password}
if [ $? -eq 0 ]; then
echo "FAIL"
else
echo "success"
fi

输出:

hello 3333
match
1
0
FAIL

问题:我不明白为什么它会回应“失败”。 “匹配”变量在 while 循环内设置为 1,但出于某种原因,一旦我离开 while 循环,它仍然认为它是声明中的初始零。

我已经尝试过很多不同的事情,所以如果有人能给我一些具体的尝试,那就太好了!

谢谢

最佳答案

这不起作用的原因实际上是 UUOC .在 bash 中,管道的右侧在子 shell 中运行。在子 shell 中设置的任何变量都不会在父 shell 中设置。要解决此问题,请使用重定向而不是管道:

username="hello"
password="3333"

function login {
# 1 - Username
# 2 - Password
match=0
while read x y _; do
if [ "${x}" == "${1}" ] && [ "${y}" == "${2}" ]; then
echo "match"
match=1
echo $match
break
fi
done < LoginsMaintMenu.txt
echo $match
return $match
}

echo $username $password
if login "${username}" "${password}"; then
echo "FAIL"
else
echo "success"
fi

关于linux - Bash 脚本变量作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com