为什么 "sudo -Eualice" 在没有 space 的情况下接受用户参数?
How come "sudo -Eualice" accepts the user argument when there is no space between?
如果我运行以下命令:sudo -Eualice whoami
为什么在标志和参数之间没有 space 时命令接受用户参数?我希望 -Eualice
被解释为 -E -u -a -l -i -c -e
.
sudo -Eualice
只是遵循 Unix 命令行的惯例。如果一个选项接受一个选项参数(比如 -u
选项接受一个 username
选项参数)那么选项参数可以与选项字母分开通过空格(如 -u alice
)或者它可以紧跟在没有空格的选项字母之后(如 -ualice
)。
不带参数的选项也有类似的约定。不带参数的选项(如 -E
在这种情况下)可以后跟空格,或者可以紧跟另一个选项,并且非空格序列可以继续用于多个选项。这就是让您执行 ls -lsatr
之类的操作而不必键入 ls -l -s -a -t -r
.
的原因
在您的示例中,您同时使用了这两个跳过空格的变体。 -E
紧跟 u
选项,紧接着是 u
的 alice
选项参数。
没有更多的选项可以跟随没有空格的选项参数,因为那样会产生歧义,所以如果你想添加一个 -P
选项,那么你必须写:
sudo -Eualice -P whoami
或者你可以在 -u
之前的某处写上 -P
:
sudo -EPualice whoami
这比必须写更方便:
sudo -E -P -u alice whoami
但是,如果您在其他人可能需要阅读的上下文中编写命令(例如,在其他人将使用和维护的 shell 脚本中),那么您可能会决定使用长的完全空白分隔的版本,因为它更便于人们阅读。
如果我运行以下命令:sudo -Eualice whoami
为什么在标志和参数之间没有 space 时命令接受用户参数?我希望 -Eualice
被解释为 -E -u -a -l -i -c -e
.
sudo -Eualice
只是遵循 Unix 命令行的惯例。如果一个选项接受一个选项参数(比如 -u
选项接受一个 username
选项参数)那么选项参数可以与选项字母分开通过空格(如 -u alice
)或者它可以紧跟在没有空格的选项字母之后(如 -ualice
)。
不带参数的选项也有类似的约定。不带参数的选项(如 -E
在这种情况下)可以后跟空格,或者可以紧跟另一个选项,并且非空格序列可以继续用于多个选项。这就是让您执行 ls -lsatr
之类的操作而不必键入 ls -l -s -a -t -r
.
在您的示例中,您同时使用了这两个跳过空格的变体。 -E
紧跟 u
选项,紧接着是 u
的 alice
选项参数。
没有更多的选项可以跟随没有空格的选项参数,因为那样会产生歧义,所以如果你想添加一个 -P
选项,那么你必须写:
sudo -Eualice -P whoami
或者你可以在 -u
之前的某处写上 -P
:
sudo -EPualice whoami
这比必须写更方便:
sudo -E -P -u alice whoami
但是,如果您在其他人可能需要阅读的上下文中编写命令(例如,在其他人将使用和维护的 shell 脚本中),那么您可能会决定使用长的完全空白分隔的版本,因为它更便于人们阅读。