我一直在试着让它的不同版本生效:

[[ -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

10-07 18:09