1

Я размышлял над этим вопросом и не могу понять, почему ответ таков, каков он есть. Сколько аргументов передается команде оболочкой в этой командной строке:
<pig pig -x " " -z -r" " >pig pig pig
а. 8 б. 6 в. 5 дней 7 эл. 9
Предполагается, что первый символ будет символом для перенаправленного ввода, но сайт не позволяет мне его использовать. [Исправлена.]
Я посмотрел на этот вопрос и сказал: хорошо ... аргументы ... не варианты, так что 2-ая свинья, затем "", затем -r "", 4-ая свинья и 5-ая свинья ...- z и -x - это варианты, поэтому я считаю 5. Ответ б. 6. Где шестой аргумент, который передается?

2 ответа2

1

Аргументы, передаваемые программе pig :

  1. -Икс
  2. ""
  3. -z
  4. -р" "
  5. второй до последней свиньи
  6. последняя свинья

С точки зрения программирования принято считать все в argv (кроме argv[0]) аргументом программы. Это включает в себя токены "option" - я имею в виду, что если программа вообще не использует никаких опций и вместо этого считает что-то вроде «-x» именем файла?

0

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

Параметры на уровне командной строки являются аргументами, которые команда обрабатывает специально. (Более конкретно: они включены в массив argv, передаваемый команде.) Таким образом, в зависимости от того, что именно подразумевается под "аргументом", они могут или не могут быть включены в подсчет. Я подозреваю, что они включены, но вторая "свинья" - нет (потому что это имя команды, а не аргумент) (ну, хорошо, она тоже включена в argv, но не считается) (в основном) ).

Чтобы проиллюстрировать, что я имею в виду, когда параметры представляют собой специально обработанные аргументы (и произвольность различия), рассмотрим следующую команду:

tar cv -f foo.tar bar
  • tar это команда
  • cv это два варианта (создать и подробный). Я знаю, что это не похоже на это, но tar предшествует последовательному использованию - для введения параметров, и будет рассматривать свой первый "аргумент" как один или несколько параметров, даже если он не начинается с -
  • -f foo.tar - другой параметр и его аргумент (который отличается от общего аргумента команды)
  • bar - это обычный командный аргумент (наконец-то!)

Обратите внимание, что обе эти команды эквивалентны приведенным выше:

tar cvf foo.tar bar
tar cv -ffoo.tar bar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .