Я размышлял над этим вопросом и не могу понять, почему ответ таков, каков он есть. Сколько аргументов передается команде оболочкой в этой командной строке:<pig pig -x " " -z -r" " >pig pig pig
а. 8 б. 6 в. 5 дней 7 эл. 9
Предполагается, что первый символ будет символом для перенаправленного ввода, но сайт не позволяет мне его использовать. [Исправлена.]
Я посмотрел на этот вопрос и сказал: хорошо ... аргументы ... не варианты, так что 2-ая свинья, затем "", затем -r "", 4-ая свинья и 5-ая свинья ...- z и -x - это варианты, поэтому я считаю 5. Ответ б. 6. Где шестой аргумент, который передается?
2 ответа
Аргументы, передаваемые программе pig
:
- -Икс
- ""
- -z
- -р" "
- второй до последней свиньи
- последняя свинья
С точки зрения программирования принято считать все в argv
(кроме argv[0]
) аргументом программы. Это включает в себя токены "option" - я имею в виду, что если программа вообще не использует никаких опций и вместо этого считает что-то вроде «-x» именем файла?
Я думаю, что вы сталкиваетесь с проблемами семантики именно с тем, что считается аргументом.
Параметры на уровне командной строки являются аргументами, которые команда обрабатывает специально. (Более конкретно: они включены в массив 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