¿Por qué usar un tablero superfino (-) para pasar banderas de opciones a tar?

Para crear un file tar para un directory, el command tar con opciones de compress , verbose y file se puede escribir de la siguiente manera:

 $ tar -cvf my.tar my_directory/ 

Pero también funciona para hacerlo de esta manera:

  $ tar cvf my.tar my_directory/ 

Es decir, sin el guión (-) que precede a las opciones. ¿Por qué pasaría una raya (-) a la list de opciones?

Hay varios patrones diferentes para las opciones que se han utilizado históricamente en las aplicaciones UNIX. Varios viejos, como el alquitrán , usan un esquema posicional:

arguments de opciones de command

como por ejemplo los usos de alquitrán

tar * something * f "file operado en" * "routes de files para manipular" *

En un primer bash por evitar la confusión, tar y algunos otros progtwigs con el estilo antiguo de arguments de banderas permitieron delimitar las banderas con guiones, pero la mayoría de nosotros, los viejos, simplemente lo ignoramos.

Algunos otros commands tienen una syntax de línea de command más complicada, como dd (1) que usa banderas, signos iguales, nombres de ruta, arguments y una perdiz en un tree de pera, todo con salvaje abandono.

En BSD y versiones posteriores de Unix, esto había convergido más o less a los indicadores de un solo carácter marcados con '-', pero esto comenzó a presentar un par de problemas:

  • las banderas podrían ser difíciles de recordar
  • a veces querías usar un nombre con '-'
  • y especialmente con las herramientas de GNU, comenzaron a haber limitaciones impuestas por el número de indicadores posibles. Entonces las herramientas de GNU agregaron opciones largas de GNU como --output .

Entonces Sun decidió que el extra '-' era networkingundante y comenzó a usar banderas de estilo largo con '' solteras.

Y así es como llegó a ser el desastre que es ahora.

Puede dar opciones de tar en la forma de Unix estándar tar -c -f foo -v -B file1 file2 file3 donde necesita el guión para diferenciar entre opciones y parameters o los nombres de file al final de la línea de command. O puede juntar todas las opciones en el primer argumento, en cuyo caso el guión es opcional.

Luego está ps , donde usas los guiones si estás usando las opciones de SysV-ish, y los dejas afuera si estás usando las opciones de BSD-ish, solo para hacer las cosas más confusas.

Y ni siquiera hablamos de find .

El guión se usa para eliminar la ambigüedad entre los nombres y valores de los parameters de una opción. Supongo que es más una convención estándar.

Hay hasta cuatro convenciones para usar las opciones de línea de command de Unix:

  1. -o -p -t (guión antes de cada opción)
  2. -opt (guión antes de un set de opciones)
  3. optar (sin guiones antes de un set de opciones)
  4. –long-option (doble guion antes de un nombre de opción)

Por ejemplo:

 $ tar -x -v -z -f package.tar.gz $ tar -xvzf package.tar.gz $ tar xvzf package.tar.gz $ tar --extract -verbose -gzip -file package.tar.gz