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
или вы можете написать -P
где-то перед -u
:
sudo -EPualice whoami
, что удобнее, чем писать:
sudo -E -P -u alice whoami
Однако, если вы писали команду в контексте, где ее могли бы прочитать другие люди (скажем, в оболочке) сценария, который другие люди будут использовать и поддерживать), тогда вы можете решить использовать длинную версию, полностью разделенную пробелами, потому что для людей она более понятна для чтения.