Что такое “аргумент неопции”?

echo печатает его аргумент, сопровождаемый новой строкой. С несколькими аргументами они разделяются пробелами. В зависимости от варианта Unix, оболочки и опций оболочки, это может также интерпретировать некоторое начало escape-последовательностей \, и это может рассматривать первый аргумент (аргументы) как опции, если они запускают с -.

printf интерпретирует его первый аргумент как формат и последующие аргументы как аргументы % спецификаторы. Никакая новая строка не добавляется, если Вы не указываете тот. В первом аргументе все символы кроме два интерпретируются буквально: % запускает printf спецификатор, и \ запускает escape-последовательность (например. \n для символа новой строки).

Поскольку различные оболочки работают по-другому, echo "$string" не всегда печатает указанную строку плюс новая строка. Надежный способ распечатать строку printf %s "$string". Если Вы хотите новую строку после строки, записать printf '%s\n' "$string".

В Вашем случае, предполагая это blah не запускается с a - или содержите % или \, единственная разница между двумя командами - это echo добавляет новая строка и printf не делает.

7
19.10.2013, 03:57
3 ответа

Терминология не полностью фиксируется, таким образом, другая документация использует различные термины, или хуже, те же условия с различными значениями. Терминология в странице справочника, которую Вы читаете, является общей. Это - то, используемое в стандарте POSIX. Короче говоря каждое слово после команды является аргументом и аргументами, которые запускаются с - опции.

Аргумент

На командном языке оболочки параметр передал утилите как эквивалент единственной строки в массиве argv, созданном одной из исполнительных функций. Аргументом является одна из опций, аргументов опции или операндов после названия команды.

Операнд

Аргумент команде, которая обычно используется в качестве информации предоставления объекта к утилите, необходимой для завершения ее обработки. Операнды обычно следуют за опциями в командной строке.

Опция

Аргумент команде, которая обычно используется для определения изменений в поведении утилиты по умолчанию.

“Утилита” - то, что обычно называют “командой” (стандарт использует утилиту слова для предотвращения неоднозначности со значением “команды”, которая включает аргументы или даже составные команды оболочки).

Большинство команд следует за стандартным служебным синтаксисом аргумента, где опции запускаются с a - (подчеркните штриховой линией иначе минус). Таким образом, опция - что-то как -a (короткая опция, следует инструкциям POSIX), или --all (долгая опция, расширение от GNU). Аргументом неопции является аргумент, который не начинается -, или это состоит только из - (который who обработки как литеральное имя файла, но много команд рассматривают как значение или стандартный ввод-вывод или стандартный вывод).

Кроме того, сами некоторые опции имеют аргумент. Этот аргумент может быть передан несколькими способами:

  • Для однобуквенной опции, в том же аргументе утилите: foo -obar: bar аргумент однобуквенной опции -o.
  • В GNU длинный синтаксис аргумента, в том же аргументе, разделенном знаком "равно": foo --option=bar.
  • В отдельном аргументе: foo -o bar. Если опция -o берет аргумент, затем bar аргумент опции -o. Если -o не берет аргумент затем -o операнд.

Вот более длительный пример:

tail -n 3 myfile

-n опция, 3 аргумент опции -n, и myfile операнд.

Терминология отличается, таким образом, можно найти документы, которые используют аргумент в смысле, где POSIX использует операнд. Но “аргумент неопции” более характерен, чем любой термин для этого значения.

5
27.01.2020, 20:17
  • 1
    Спасибо. Когда опция ожидает аргумент после него, действительно ли таким аргументом является аргумент неопции? Или это называют "аргументом опции? Например, bash -c "echo hello" -c ожидайте аргумент. В руководстве Bash говорится для bash, "-c, Read и выполняет команды от первого аргумента неопции после обработки опций, затем выходят". Это, кажется, называет аргумент в пользу -c аргумент неопции. спасибо –  StackExchange for All 07.04.2018, 01:22

Вещь, опции (или переключает или отмечает, независимо от того, что Вам нравится называть их), количество как аргументы также. На самом деле что-либо, что Вы предоставляете после самого названия команды, составляет аргументы команды (за исключением конструкций, используемых оболочкой как перенаправление, например).

Ваша программа/сценарий получает все вместе как аргументы и должна разделить аргументы опции (аргументы, которые являются опциями) от другого... Вы предположили это!... аргументы неопции.

Таким образом, то, что говорит информационная страница, является этим если who получает аргумент, который не является опцией, это будет полагать, что как альтернатива файлу по умолчанию, для которого это консультируется, входят в систему информация.

4
27.01.2020, 20:17
  • 1
    Если я не засвидетельствовал info who Я никогда не полагал бы, что кто-то использует термин "никакие аргументы неопции". Это является довольно хромым. –  slm♦ 19.10.2013, 04:46
  • 2
    @slm Ubuntu 12.04 32 битов, который я не знаю об этом. Все еще технически корректный, хотя... –  Joseph R. 19.10.2013, 12:00
  • 3
    Сделайте я разбираюсь в этом: все не опция является неаргументом?! ** И также: опция = переключается = флаг = аргумент? –  erch 19.10.2013, 20:44
  • 4
    @chirp Все не опция является все еще аргументом, но это - аргумент неопции. Только добавить к беспорядку: некоторые опции могут иметь аргументы :) О, и option=switch=flag свободно содержит, да. –  Joseph R. 19.10.2013, 21:45

Я все еще думаю, что формулировка плоха на этом и попыталась бы не зависнуться. То, что они пытаются сказать, - то, что в опытном операторе они включали как это:

 `who' [OPTION] [FILE] [am i]

Таким образом, когда они не говорят, "Если дали аргументов неопции", они обращаются к [FILE] и [am i].

Следующий, что логика, когда они говорят, "Если дали один аргумент неопции", т.е. [FILE], затем Вы переопределяете [FILE] местоположение, /var/run/utmp.

Наконец для этого комментария, "Если дали два аргумента неопции", т.е. [am i] затем Вы просите информацию о пользователе, который просто выполнил команду:

$ who am i
saml     pts/5        2013-10-18 16:29 (:0.0)

-or-

$ who mom likes
saml     pts/5        2013-10-18 16:29 (:0.0)

Описание склонно, но они определенно перепутали его при помощи термина "никакие аргументы неопции".

В уме авторов это опции:

  -a, --all         same as -b -d --login -p -r -t -T -u
  -b, --boot        time of last system boot
  -d, --dead        print dead processes
  -H, --heading     print line of column headings
  -l, --login       print system login processes
      --lookup      attempt to canonicalize hostnames via DNS

  ....

И [FILE] и [am i] и [mom likes] неопции. Но это ВСЕ опции, таким образом, различие ограничено просто этим инструментом!

1
27.01.2020, 20:17
  • 1
    “ Аргумент Неопции” является совершенно стандартной терминологией (и буквально и в разговорной речи). См. мой ответ. –  Gilles 'SO- stop being evil' 20.10.2013, 03:35
  • 2
    @Gilles - Я изобразил Вас, или Stephane объяснит этого, я все еще думаю, что терминология плоха. При определении вещей этот путь похож на использующий отрицательный язык при определении условного выражения в если оператор. if ($notStatus != option). Я понимаю то, что это означает, но это на высоте, путая. Хороший BTW ответа, на обычный 8-) –  slm♦ 20.10.2013, 03:50

Теги

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