Проблема * в Параметре командной строки

Я записал программу в Java, который принимает вход через параметры командной строки. Я получаю вход двух чисел и оператора из командной строки. Для умножения двух чисел я должен дать вход как, например. 5 3 *, но это не работает, как записано.

Почему это не принимает * из командной строки?

17
задан Nithismiles 7 March 2017 в 11:47
поделиться

3 ответа

Это потому, что * - это подстановочный знак оболочки: он имеет особое значение для оболочки, которая расширяет его перед передачей команде (в данном случае java ).

Поскольку вам нужен литерал * , вам нужно экранировать его из оболочки. Точный способ экранирования зависит от вашей оболочки, но вы можете попробовать:

java ProgramName 5 3 "*"

Или:

java ProgramName 5 3 \*

Кстати, если вы хотите знать, что оболочка делает с * , попробуйте распечатать содержимое String [] args в ваш метод main . Вы обнаружите, что он будет содержать имена файлов в вашем каталоге.

Это может быть удобно, если вам нужно передать некоторые имена файлов в качестве аргументов командной строки.

См. Также

  • Википедия: glob

    Например, если каталог содержит два файла, a.log и b.log , тогда команда cat * .log будет расширен оболочкой до cat a.log b.log

  • Википедия: escape-символ

    В оболочке Борна ( sh ) звездочка ( * ) и вопросительный знак (? ) - это подстановочные знаки, расширяемые с помощью подстановки.Без предшествующего escape-символа * будет расширяться до имен всех файлов в рабочем каталоге, которые не начинаются с точки, если и только если такие файлы существуют, в противном случае * ] остается нерасширенным. Таким образом, чтобы обращаться к файлу с буквальным названием "*" , оболочке нужно указать, чтобы она не интерпретировала его таким образом, поставив перед ним обратную косую черту ( \ ).

30
ответ дан 30 November 2019 в 11:26
поделиться

Попробуйте заключить * в кавычки, например «*» . Звездочка - это зарезервированный символ в командной строке.

2
ответ дан 30 November 2019 в 11:26
поделиться

* имеет особое значение в интерпретаторах оболочки. Как получить * буквально зависит от того, какой интерпретатор оболочки вы используете. Для Bash вы должны заключать * в одинарные кавычки, т.е. '*', вместо двойных кавычек, таких как «*».

4
ответ дан 30 November 2019 в 11:26
поделиться
Другие вопросы по тегам:

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