Аргументы команды: опции, строки, файлы

При запуске программы в Unix указывается имя исполняемого файла и список параметров, разделённых пробелами. Дополнительно, может быть задано перенаправление стандартных файлов ввода/вывода.

В зависимости от программы, параметры могут интерпретироваться как опции, как строки или как имена файлов. Единого стандарта нет, но есть несколько популярных соглашений. Однобуквенные опции, как правило, начинаются со знака минус: -x или -x значение, опции с длинными именами - с двух минусов: --xxx-xxx или --xxx-xxx=значение. Программы, которые не работают с файлами, могут использовать опции без знака минус.

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

  • Параметр начинающийся со знака минус, интерпретируется как опция, даже если в текущем каталоге есть файл с таким именем;
  • Параметр состоящий из двух знаков минус интерпретируется как последняя опция за которой идут только имена файлов;
  • Параметр состоящий из одного минуса интерпретируется как файл стандартного ввода или вывода (в зависимости от смысла выполняемого действия).

Примеры:

cat file # Команда cat интерпретирует параметр как имя файла
echo file # Команда echo интерпретирует параметр как текст
cat -n file # Обе команды интерпретируют -n как опцию
echo -n file # правда, с разным значением
cat -- -n file # Команда cat интерпретирует "--" как конец опций
echo -- -n file # Команда echo не интерпретирует "--" как конец опций
cat - file # Команда cat интерпретирует "-" как чтение из стандартного ввода
echo - file # Команда echo не читает из файлов и не придает "-" особого значения

dd if=file of=/dev/null # Команда dd использует нестандартный формат опций
ps ax --forest # Команда ps все аргументы трактует как опции. Короткие опции используются без минуса
java -version # java использует длинные опции с одним минусом