Answers:
简单的方法(更有效)是通过for循环(在一行上,但是为了清楚起见,在此处显示为多行):
for i in {date,grade}; do
     apt up${i}
done
明智的方法是~/.bashrc为这两个命令添加别名,而不必再重新键入:
alias upgrade=' sudo apt update && sudo apt upgrade'
精心设计的方法是这样做的:
$ echo sudo" "apt" "up{"date","grade"}" && " :
sudo apt update &&  sudo apt upgrade &&  :
看看发生了什么事?我们正在构建要由shell运行的有效文本字符串。现在,您所需要做的就是使用eval而不是echo。但是eval通常不建议在Shell脚本中使用,并且此命令比for循环更复杂且不可移植。变化对无EVAL主题(和最短的,到目前为止,但效率不高,由于管和大量的命令echo,二apt,sudo和sh所以很多分叉的):
$ echo "apt "{update,upgrade}";"|sudo sh
我们还可以使用set将所需序列转换为位置参数,并仅apt使用$1and $2args 执行:
$ set {update,upgrade}; echo apt $1 && echo apt $2
apt update
apt upgrade
或者也可以再次使用for循环,因为如果您未在其中指定序列,则默认情况下会处理位置参数 for variable (sequence)
$ set {update,upgrade} ; for i; do echo apt $i ;done
apt update
apt upgrade
set在很多使用shell的专业人士中,我看到使用是一种非常普遍的技术,这是有充分的理由的-这种方法非常便携,可以在/bin/sh没有阵列或{a,b,c}扩展的情况下使用。因此POSIX的可移植方式是set update upgrade ; for i; do echo apt $i ;done。此外,这应该是有效的。
或者我们可以走while循环路线:
$ echo {date,$'\n',grade}|while read i;do echo apt up${i}; done 
apt update
apt upgrade
当然,请记住在没有echo实际执行命令的情况下运行它
for i in {date,grade}; do sudo apt up${i}; done
                    ~/.bash_aliases。此文件应由自动提供~/.bashrc。
                    apt带有不同参数(更新和升级)的两个命令(是的,这是两个命令)时,这样做毫无意义,所以我仍然要说for循环是
                    for i in date grade; do
                    upgrate。
                    使用xargs而不是的另一个简单选项for:
echo up{dat,grad}e | xargs -n1 apt
测试:
$ echo up{dat,grad}e | xargs -n1 echo apt
apt update
apt upgrade
              printf "%s\n" {date,grade} | xargs -I% -n1 echo apt up%尽管可能更长一些,但主题可能有所不同
                    printf '%s'通常是个好习惯,因为您无法逃脱它,例如使用--help或-e。
                    printf '%s\0'会更好,它xargs有一个标记来处理终止为null的args