我一直在试着让它的不同版本生效:
[[ -e "~/usersl" ]] && { user=`cat ~/usersl`; echo Username: $user; } || { read -p "Username:" user; echo $user > ~/usersl; }
主要的目标是把if…then…else放在一行。从我在这个网站和其他网站上看到的情况来看,这应该是可行的。它应该检查是否存在UsRSL文件,如果它存在,那么它打印出检测到的用户名并填充$Upple变量。如果不存在文件名,那么它应该请求用户名并同时填充变量,然后将新用户名记录到文件中。一旦完成了下一个命令,这个命令就运行了。文件已经存在,它只显示用户名并传播变量。希望我的解释不太复杂,但任务很简单。
非常感谢您的帮助
最佳答案
您最直接的错误与条件语法无关,而是由您在测试中引用的错误引起的:
if [[ -e ~/usersl ]]; then
user=$(<~/usersl)
echo "Username: $user"
else
read -p "Username:" user
echo "$user" > ~/usersl
fi
作为一个单列,这将是:
if [[ -e ~/usersl ]]; then user=$(<~/usersl); echo "Username: $user"; else read -p "Username:" user; echo "$user" >~/usersl; fi
颚化符扩展被引号抑制。如果有疑问,请写
$HOME
,而不是~
。使用
a && b || c
很容易出错:如果a
成功并且b
尝试运行但失败,那么即使也调用了c
也可以运行b
。