Предотвратите аргументы сценария powershell с звездочкой от расширения в отдельные имена файлов при передаче в Java-программу [duplicate]

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

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

Например:

$(document).on("click", $(selector), function() {
    // Your code here
});
16
задан Nithismiles 7 March 2017 в 12:47
поделиться

5 ответов

В MS WINDOWS не совсем верно: «java.exe» молча расширяет аргументы командной строки с помощью подстановочных знаков

  • *
  • ?
  • [ abc]

, но только в последнем компоненте, поэтому

a/*/*

не работает, как вы можете ожидать.

Он также игнорирует записи "." и "..", но выполняет другие имена файлов, начиная с ".".

Чтобы избежать недоразумений: если я посмотрю на командную строку запуска JAVA-процесса с PROCEXP, я вижу нерасширенные аргументы!

Я не нашел возможности обойти это. Другими словами: до тех пор, пока у вас есть хотя бы один файл или каталог в текущем каталоге, «java Calc 3 * 7» НЕ будет работать!

Это ОЧЕНЬ уродливо и, кажется, всегда там во всех версиях JRE вплоть до Java 8.

Есть ли у кого-нибудь представление о том, как отключить гадость командной строки Java?

2
ответ дан Arno Unkrig 20 August 2018 в 09:36
поделиться
  • 1
    Я согласен, эта функция может быть неприятной, но это практическое требование, если инструменты командной строки java должны быть относительно OS-agnostic. Однако, похоже, нет какой-либо system.property, чтобы отключить его, и это делает его четвероным (вздохом). – philwalk 6 May 2016 в 18:29
  • 2
    Кстати, вы можете дважды указывать звездочку из сеанса cmd.exe, и она делает то, что вы ожидаете, но если вы работаете в рамках сеанса Bash Cygwin, похоже, что не нужно делать то же самое. Странная часть - я проверял, что проблема возникает где-то в java, а не в среде оболочки (как вы сказали). Смотрите мои заметки здесь: stackoverflow.com/questions/37037375 – philwalk 6 May 2016 в 18:41
  • 3
    эта проблема также вызывает вызов от PowerShell, независимо от того, как выходить / цитироваться – Hashbrown 22 November 2017 в 03:18

Используйте одиночные кавычки :

java FooBar 5 3 '*'

Это работает с большинством популярных оболочек (включая bash и ksh).

1
ответ дан Dávid Horváth 20 August 2018 в 09:36
поделиться

Это потому, что * является подстановочным знаком оболочки: он имеет особое значение для оболочки, которая расширяет ее, прежде чем передавать ее команде (в данном случае 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 В оболочке Bourne (sh) символы звездочки (*) и вопросительного знака (?) являются подстановочными символами, расширенными с помощью globbing , Без предшествующего escape-символа * будет расширяться до имен всех файлов в рабочем каталоге, которые не начинаются с периода, если и только если есть такие файлы, в противном случае * остается нерасширенным. Поэтому, чтобы ссылаться на файл, буквально называемый "*", оболочке должно быть сказано не интерпретировать ее таким образом, предшествуя ей обратным слэшем (\).
28
ответ дан polygenelubricants 20 August 2018 в 09:36
поделиться
  • 1
    Для полноты, и поскольку OP не упоминает какую-либо конкретную операционную систему, обратите внимание, что в Windows globbing лежит ответственность приложения, а не оболочки. Обычно он обрабатывается библиотекой времени выполнения приложения. – Harry Johnston 5 June 2014 в 23:30
  • 2
    оказывается, что в некоторых случаях Windows jvm выполняет свое собственное внутреннее подтачивание, см. stackoverflow.com/questions/37037375 – philwalk 6 May 2016 в 19:35

Попробуйте окружить * кавычками вроде "*". Звезда является зарезервированным символом в командной строке.

2
ответ дан user 20 August 2018 в 09:36
поделиться

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

4
ответ дан Zhaojun 20 August 2018 в 09:36
поделиться
Другие вопросы по тегам:

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