Si tienes algo de experiencia en la línea de comandos puedes haber visto que los comandos (mv, cp, git, mkdir) por lo general se componen de varias partes y se comportan de diferentes maneras dependiendo de estas opciones.

En este post voy a tratar de explicar y establecer un lenguaje común entre las diferentes partes de los comandos.

Estas partes son llamadas options (opciones), flags, switches, toggles y arguments (argumentos).

Options (Opciones)

Primero, las opciones son los argumentos que modifican el comportamiento del programa. Por convención, estas empiezan con un guion "-" para las versiones resumidas (por lo general una sola letra, short form), y dos guiones "--" para la versión más larga (long form). i.e: "-h", y "--help".

Las opciones pueden tener valores asociados a ellos mismos, por ejemplo, en el programa ffmpeg tenemos la opcion -preset la cual podemos especificar un valor como fast o ultrafast. Por otro lado, el programa git commit  tiene la opción -m que te permite agregar el commit message: git commit -m "Update README"

Flags / Switches / Toggles

Las flags, también llamadas switches o toggles, son un tipo de opciones que se usan exclusivamente para encender o apagar alguna característica del programa: --verbose, --quiet, --all, --force .

Por ejemplo, en muchos comandos encontramos la flag "-v" o "--verbose" (verboso en español), que indica que queremos ver el proceso completo del progama, es decir todos los pasos que ejecuta de manera verbosa. Por ejemplo, si usamos esta opcion cuando hacemos una copia con cp  vamos a poder ver todos los archivos mientras se van copiando. (Tomar en cuenta que para copiar directorios es necesario especificar además el flag "-r", de "recursivo")

Argumentos (argumentos)

Por último, los argumentos son los objetos que el programa utiliza o modifica durante su ejecución. Por ejemplo, en el comando mv los argumentos son el archivo o directorio de origen y de destino. Otro ejemplo, en el comando cat  el argumento es el archivo que se quiere imprimir en el stdout.

Tips

Como saber qué opciones tienen el comando

Por lo general es de mucha ayuda familiarizarse con las opciones de los comandos que utilizas, al fin y al cabo necesitas saber de que sirven las herramientas que usas.

Con la mayoría de comandos puedes usar man <comando> o el flag --help. El comando man por lo general explica todas opciones a detalle y el flag --help es más un resumen.

Ej.: man mv imprime el manual del comando mv.

...
The following options are available:

-f      Do not prompt for confirmation before overwriting the destination
		path.  (The -f option overrides any previous -i or -n options.)

-i      Cause mv to write a prompt to standard error before moving a file
        that would overwrite an existing file.  If the response from the
        standard input begins with the character `y' or `Y', the move is
        attempted.  (The -i option overrides any previous -f or -n
        options.)

-n      Do not overwrite an existing file.  (The -n option overrides any
		previous -f or -i options.)

-v      Cause mv to be verbose, showing files after they are moved.
...

Por ejemplo aqui podemos ver que tenemos las opciones "-f , -i, -n, -v".

N.B.:

Existe cierto desacuerdo entre los términos flag y switch, algunos autores lo utilizan de manera intercambiable, y otros mencionan que los switches son en realidad lo que en este post estamos llamando opciones.

Fuentes y lecturas recomendadas: