Предполагается, что вы используете оболочку, совместимую с оболочкой Bourne; например sh, bash, ksh и т. д. следующая оболочка передаст все аргументы командной строки команде java:
#!/bin/sh
OPTS=...
java $OPTS com.example.YourApp "$@"
$@
расширяется до оставшихся аргументов для сценария оболочки, а заключение в кавычки приводит к тому, что аргументы заключаются в индивидуальные кавычки, так что следующий аргумент передаст Java один аргумент:
$ wrapper "/home/person/Stupid Directory Name/foo.txt"
Без двойных кавычек около "$@"
в скрипте-оболочке Java получит три аргумента для вышеприведенного.
Обратите внимание, что это не работает с "$*"
. Согласно ручной записи bash
:
"$*"
эквивалентно "$1c$2c..."
, где c
является первым символом значения переменной IFS
.
Другими словами, все аргументы оболочки будут объединены в один командный аргумент для вашего Java-приложения, игнорируя исходные границы слов.
См. Руководство bash
или sh
... или спецификацию оболочки POSIX ... для получения дополнительной информации о том, как оболочка обрабатывает кавычки.