Как я использую параметры командной строки для 'sh' в '-c' командная строка?

Я знаю это

sh -c 'echo $1' sh 4

произведет 4. и

sh -c 'echo $2' sh 4 5

произведет 5.

Но я не могу понять как параметры после второго sh были переданы команде рядом с sh -c. Я прочитал страницу справочника обоих bash и dash но не мог найти введение об этом виде синтаксиса.

3
задан 7 January 2019 в 10:32

2 ответа

От man sh:

-c string If  the  -c  option  is  present, then commands are read from
          string.  If there are arguments after the string,  they  are
          assigned to the positional parameters, starting with $0.

В Вашей команде второе sh просто параметр с положением 0 в то время как 4 имеет положение 1 и так далее.

Можно выполнить это для проверки:

$ sh -c 'echo $0' sh 4 5
sh
4
ответ дан 1 December 2019 в 13:14

Это поведение на самом деле указано стандартом POSIX, который все подобные Границе оболочки должны поддерживать для требования себя портативный.

-c [-abCefhimnuvx] sh [-o опция]... [+abCefhimnuvx] [+o опция]... command_string [command_name [аргумент...]]

Посмотрите command_string параметр? Теперь давайте посмотрим на -c описание флага:

- c

Считайте команды из command_string операнда. Установите значение специального параметра 0 (см. Специальные Параметры) от значения command_name операнда и позиционных параметров (1$, 2$, и так далее) в последовательности от остающихся операндов аргумента. Никакие команды не должны быть считаны из стандартного входа.

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

sh -c 'echo Hi, I am $0 , my first positional parameter is $1' foobar 5

определил бы имя процесса к sh foobar.

На всякий случай Вы задаетесь вопросом что $0 это также покрыто разделом "Special Parameters" Спецификаций Командного языка Shell:

0

(Нуль). Расширяется до названия сценария оболочки или сценария оболочки.

4
ответ дан 1 December 2019 в 13:14

Другие вопросы по тегам:

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