提问人:R3quie 提问时间:11/7/2023 最后编辑:R3quie 更新时间:11/7/2023 访问量:46
Bash:变量未在 if 中设置
Bash: variable not setting in if
问:
第一次尝试 Linux,学习 Bash 只是为了好玩。尝试编写脚本。
这是我的一段代码(bash):
sudo pacman -Suy | if grep --color=always -e "^" -e "there is nothing to do"; then pup=0; else pup=1; fi;
当我尝试回显变量时,没有任何返回。我已经通过多种方式确认根本没有设置变量。当我尝试将其从 if 语句中设置出来时,echo $var 工作得很好。
这是我的上下文代码的很大一部分:
case $yn in
[yY] ) echo running only yay -Suy;
echo running...;
yay -Suy | if grep --color=always -e "^" -e "there is nothing to do"; then yup=0; else yup=1; fi;
break;;
[nN] ) echo not updating;
echo exiting...;
exit;;
[pP] ) running only pacman -Suy;
echo running...;
sudo pacman -Suy | if grep --color=always -e "^" -e "there is nothing to do"; then pup=0; else pup=1; fi;
break;;
[bB] ) echo running full sys update;
echo running...;
sudo pacman -Suy | if grep --color=always -e "^" -e "there is nothing to do"; then pup=0; else pup=1; fi;
yay -Suy | if grep --color=always -e "^" -e "there is nothing to do"; then yup=0; else yup=1; fi;
break;;
* ) echo invalid response;;
esac
done
if [ "$pup" -eq 1 ]; then
echo "Pacman has updated something."
elif [ "$pup" -eq 0 ]; then
echo "Pacman has not updated anything."
else
:
fi
if [ "$yup" -eq 1 ]; then
echo "Yay has updated something."
elif [ "$yup" -eq 0 ]; then
echo "Yay has not updated anything."
else
:
fi
成为单行本不是问题。当我用“echo '0'”替换 pup=0 时,它返回 0 没问题。我试着摆弄最后一个if语句,但没有变化。
答:
3赞
Barmar
11/7/2023
#1
变量赋值位于管道中。它在子 shell 中运行,因此变量赋值不会持久存在。
将管道置于 的条件中,而不是将整个语句放在管道中。例如,更改if
if
... | if grep ... ; then ...; else ...; fi
自
if ... | grep ...; then ...; else ...; fi
评论