Как двоеточие подписывается и долларовое объединение вопросительного знака в sh?

С точки зрения ядра существует только один специальный пользователь: UID 0. Разделение диапазонов UIDs по административным причинам делает Вашу жизнь более простой. Общие диапазоны являются поставщиком, системой, локальной, глобальной.

Пользователи поставщика установлены во время начальной установки системы и статично управляются поставщиком. пользователи системы установлены на машину в зависимости от того, какие пакеты установлены. большая часть пользователя добавляет/удаляет, что утилиты имеют предел диапазона для обработки их отдельно. локальные пользователи являются обычными пользователями и присвоенный на машину. глобальным пользователям присваивает центральная база данных, но являются обычными пользователями. использование диапазонов UID предотвращает конфликты между этими различными группами. то, где эти сокращения, может варьироваться, но обычно настраивается.

3
15.08.2014, 14:02
1 ответ

Это рассмотрено в Переменное расширение:

${parameter:?word}

If parameter is null or unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.

Поэтому, если при выполнении скрипта отсутствует аргумент, то переменная cmd становится help и записывается в оболочку в стандартном виде и обратно.

Однако, она просто считывается и не выполняется. Если вы окружите его бэктиками, то он будет выполнен и запустит функцию Usage funtion:

help() {
  echo "Usage: $0 {build|upload|log}"
}
cmd=${1:? `help`}

К сожалению, в ней все равно будет присутствовать stderr, так как для этого и предназначено расширение переменной.

Вы можете сделать следующее:

cmd=${1:-help}
$cmd
3
27.01.2020, 21:23

Теги

Похожие вопросы