我一直在尝试让这个的各种版本工作:
[[ -e "~/usersl" ]] && { user=`cat ~/usersl`; echo Username: $user; } || { read -p "Username:" user; echo $user > ~/usersl; }
主要目标是将 if..then..else 全部放在一行中。根据我在本网站和其他网站上阅读的内容,这应该可行。它应该检查 usersl 文件是否存在,如果存在,则打印出检测到的用户名并填充 $user 变量。如果 usersl 文件不存在,那么它应该询问用户名并同时填充变量,然后将新用户名记录到文件中。一旦完成下一次命令运行文件已经存在并且它只显示用户名并传播变量。希望我的解释不会过于复杂,但任务非常简单。
非常感谢任何帮助
最佳答案
您最直接的错误与条件语法无关,而是由您在测试中引用的错误引起的:
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
也被调用了。
关于linux - 如果每个结果使用多个命令,则无法获得 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088705/