我有这个小脚本,用于检查 git 配置中是否存在用户名和电子邮件,否则提示用户输入它们:
GIT_USER_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
GIT_EMAIl_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
while [[ -z $GIT_USER_EXISTS || -z $GIT_EMAIl_EXISTS ]]; do
echo "User name and Email are not set in git. Please enter them now..."
echo "First and Last name:"
read gitUser
git config --global user.name "$gitUser"
echo "Email:"
read gitEmail
git config --global user.email "$gitEmail"
done
但它不起作用;)
第一 - 它甚至没有首先进入循环。我的猜测是,与 grep 不同,awk 确实在变量中插入了一些(隐藏的?)字符。第二 - 我不确定脚本是否可以识别现在的值,因为我在循环之外声明了变量。我在这个假设上错了吗?
编辑:
我通过使用反引号而不是变量名的引号解决了第一个问题。第二个问题仍然存在 - 一定有比两次声明变量更好的用法?!类似于 do...while in shell 的东西?
编辑#2:
这样做的效果稍微好一点,但有一个相当长的条件语句。能不能再短一点?
while [[ -z $GIT_USER_EXISTS || -o $GIT_USER_EXISTS || -z $GIT_EMAIl_EXISTS || -o $GIT_EMAIl_EXISTS ]]; do
echo "User name and Email are not set in git. Please enter them now..."
echo "First and Last name:"
read gitUser
git config --global user.name "$gitUser"
echo "Email:"
read gitEmail
git config --global user.email "$gitEmail"
GIT_USER_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
GIT_EMAIl_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
done
实际上它几乎可以解决问题 - 它应该是“如果 var 已设置并且为空或 var 未设置”。但这太长了:)