Articulo de referencia

Análisis de argumentos de línea de comandos

Una línea de comandos de MS-DOS que ilustra el análisis sintáctico en comandos y argumentos. El análisis de argumentos de línea de comandos se refiere a los métodos utilizados e...

Una línea de comandos de MS-DOS que ilustra el análisis sintáctico en comandos y argumentos.

El análisis de argumentos de línea de comandos se refiere a los métodos utilizados en un lenguaje de programación para analizar los argumentos de la línea de comandos .

Opciones de línea de comandos

Una opción de línea de comandos, o simplemente opción (también conocida como indicador o interruptor), modifica el funcionamiento de un comando; el efecto lo determina el programa que ejecuta el comando. Las opciones siguen al nombre del comando en la línea de comandos, separadas por, por ejemplo, comas o espacios. No siempre se requieren separadores, como Dir/?en DIR /?DOS, que tienen el mismo efecto [ 1 ] de mostrar las opciones disponibles del comando DIR, mientras que dir --help(en muchas versiones de Unix) requiere que la opción esté precedida por al menos un espacio (y distingue entre mayúsculas y minúsculas).

El formato de las opciones varía mucho entre los sistemas operativos. En la mayoría de los casos, la sintaxis se basa en convenciones más que en requisitos del sistema operativo; la línea de comandos completa es simplemente una cadena que se pasa a un programa, el cual puede procesarla como el programador desee, siempre y cuando el intérprete pueda determinar dónde termina el nombre del comando y dónde comienzan sus argumentos y opciones.

A continuación se muestran algunos ejemplos representativos de opciones de línea de comandos, la mayoría relacionadas con la visualización de archivos en un directorio, para ilustrar algunas convenciones:

El análisis de argumentos de línea de comandos se utiliza para analizar los argumentos de un programa, y ​​esta funcionalidad está disponible en varios lenguajes. Por ejemplo, la función getopt() se encuentra en la biblioteca POSIX de C para analizar argumentos.

Métodos de análisis sintáctico

Muchos lenguajes ofrecen funcionalidad para el análisis de argumentos. Por ejemplo, la biblioteca C POSIX proporciona getopt() , Python ofrece un módulo llamado , [ 2 ] mientras que C# proporciona un espacio de nombres . [ 3 ] En otros, no están incluidos en la biblioteca estándar , sino que deben usarse a través de bibliotecas de terceros.argparseSystem.CommandLine

En muchos lenguajes, particularmente los derivados de C, se accede a los argumentos a través de los parámetros del main()método. Por ejemplo, en C y C++ , el mainmétodo tiene la firma , donde es el número de argumentos más el nombre del programa, y ​​es una matriz de cadenas de C donde es el nombre del programa. En Java y C#, el método toma un parámetro de tipo (una matriz de cadenas). Mientras tanto, en otros lenguajes, como Rust , se accede a los argumentos de la línea de comandos mediante un método , lo que permite un punto de acceso global en lugar de tener que obtenerlos de .intmain(intargc,char*argv[]);argcargvargv[0]main()argsString[]std::env::args()main()

En diferentes lenguajes de programación

AWK

AWK también lo utiliza ARGV.

INICIO { para ( i = 0 ; i < ARGC ; i ++ ) { imprimir ARGV [ i ] } }

do

C se utiliza argvpara procesar argumentos de línea de comandos. [ 4 ] [ 5 ]

Un ejemplo de análisis de argumentos en C sería:

#include <stdio.h>int main ( int argc , char * argv []) { for ( int i = 0 ; i < argc ; ++ i ) { printf ( "%s \n " , argv [ count ]); } }

La biblioteca C POSIX también tiene funciones llamadas getopt()y getopt_long().

C++

C++ accede a los argumentos de la misma manera que C.

importar std ;using std :: string ; using std :: vector ;int main ( int argc , char * argv []) { vector <string> args ( argv , argv + argc ) ; for ( const string & s : args ) { std :: println ( "{}" , s ) ; } }

Las bibliotecas POCO C++ ofrecen una clase Poco::Util::OptionProcessorpara analizar argumentos de línea de comandos. [ 6 ] Boost proporciona una clase boost::program_options::command_line_parser. [ 7 ] Mientras tanto, Google tiene una biblioteca llamada gflags. También hay una argparsebiblioteca para C++17 + que ofrece una API similar para el análisis de argumentos a Python argparse. [ 8 ]

DO#

Un ejemplo de análisis de argumentos en C# sería:

clase ReadArgs { static void Main ( string [] args ) { foreach ( string arg in args ) { Console . WriteLine ( arg ); } } }

C# proporciona el System.CommandLineespacio de nombres para el análisis avanzado de argumentos de línea de comandos. [ 9 ]

D

El lenguaje de programación Dstd.getopt proporciona un módulo .

Ir

Go proporciona el flagpaquete para el análisis de argumentos.

Haskell

Haskell proporciona la biblioteca System.Console.GetOpt.

Java

Un ejemplo de análisis de argumentos en Java sería:

public class ReadArgs { public static void main ( String [] args ) { for ( String s : args ) { System . out . println ( s ); } } }

La biblioteca Apache Commonsorg.apache.commons.cli proporciona capacidades de análisis de argumentos de línea de comandos. [ 10 ] También existe la gnu.getoptbiblioteca, portada desde GNU getopt.

Kotlin

Aquí hay algunas formas posibles de imprimir argumentos en Kotlin : [ 11 ]

fun main ( args : Array < String > ) = println ( args . joinToString ())
fun main ( args : Array < String > ) = println ( args . contentToString ())
fun main ( args : Array < String > ) { for ( arg in args ) { println ( arg ) } }

Perl

Perl utiliza @ARGV.

foreach $arg ( @ARGV ) { print $arg ; }

o

foreach $argnum ( 0 .. $#ARGV ) { print $ARGV [ $argnum ]; }

También existe Getopt::Longy Getopt::Stdpara el análisis de argumentos.

PHP

PHP utiliza argccomo contador de argumentos y argvcomo matriz que contiene los valores de los argumentos. [ 12 ] [ 13 ] Para crear una matriz a partir de argumentos de línea de comandos en el -foo:barformato, se podría utilizar lo siguiente:

$args = parseArgs ( $argv ); echo getArg ( $args , "foo" );function parseArgs ( array $args ) : array { foreach ( $args as $arg ) { $tmp = explode ( ":" , $arg , 2 ); if ( $arg [ 0 ] === "-" ) { $args [ substr ( $tmp [ 0 ], 1 )] = $tmp [ 1 ]; } } return $args ; }function getArg ( array $args , string $arg ) : string | bool { if ( isset ( $args [ $arg ])) { return $args [ $arg ]; } return false ; }

PHP también puede usar getopt(). [ 14 ]

Pitón

Python utiliza sys.argv, por ejemplo:

importar sysif __name__ == " __main__ " : for arg in sys.argv : print ( arg )

Python también tiene un módulo llamado argparseen la biblioteca estándar para analizar argumentos de línea de comandos. [ 2 ]

Raqueta

Racket utiliza un current-command-line-argumentsparámetro y proporciona una racket/cmdline[ 15 ] biblioteca para analizar estos argumentos. Ejemplo:

#lang raqueta( requiere racket/cmdline )( definir sonrisa? ( make-parameter #t )) ( definir nariz? ( make-parameter #false )) ( definir ojos ( make-parameter ":" ))( línea de comandos #:programa "emoticono"#:once-any ; los dos siguientes son mutuamente excluyentes [( "-s" "--smile" ) "modo sonrisa" ( smile? #true )] [( "-f" "--frown" ) "modo ceño fruncido" ( smile? #false )]#:once-each [( "-n" "--nariz" ) "añadir una nariz" ( nariz? #true )] [( "-e" "--ojos" ) char "usar <char> para los ojos" ( ojos char )])( printf "~a~a~a \n " ( ojos ) ( si ( nariz? ) "-" "" ) ( si ( sonrisa? ) ")" "(" ))

La biblioteca analiza indicadores largos y cortos, maneja argumentos, permite combinar indicadores cortos y maneja -hautomáticamente --help:

$ racket /tmp/c -nfe 8 8-(

Rexx

Rexx utiliza arg, por ejemplo:

hacer i = 1 a palabras ( arg ( 1 )) decir palabra ( arg ( 1 ), i ) fin

Óxido

En lugar de formar parte de los parámetros de main()(como en otros lenguajes de estilo C), en Rust los argumentos están en std::env::args(), que devuelve un std::env::Argsy se convierte en un Vec<String>con .collect(). [ 16 ]

usar std :: env ;fn main () { let args : Vec < String > = env :: args (). collect ();let query : & String = & args [ 1 ]; let file_path : & String = & args [ 2 ];println! ( "Buscando {}" , query ); println! ( "En el archivo {}" , file_path ); }

Una biblioteca popular de Rust para el análisis de argumentos de línea de comandos es clap. [ 17 ]

JavaScript

Node.js

Los programas JavaScript escritos para Node.js utilizan la process.argvvariable global. [ 18 ]

// argv.js console.log ( process.argv ) ;
$ node argv.js uno dos tres cuatro cinco [ 'node' , '/home/avian/argvdemo/argv.js' , 'uno' , 'dos' , 'tres' , 'cuatro' , 'cinco' ]

Los programas Node.js se invocan ejecutando el intérprete `node interpreter` con un archivo dado, por lo que los dos primeros argumentos serán nodey el nombre del archivo fuente JavaScript. A menudo es útil extraer el resto de los argumentos dividiendo un subconjunto de process.argv. [ 19 ]

// process - args.js console.log ( process.argv.slice ( 2 ) ) ;
$ node process-args.js uno dos = tres cuatro [ 'uno' , 'dos=tres' , 'cuatro' ]

Bollo

JavaScript escrito para uso de BunBun.argv y la util.parseArgsfunción. [ 20 ]

consola.log ( Bun.argv ) ;

Deno

JavaScript escrito para uso de Deno Deno.args[ 21 ] y la parseArgsfunción. [ 22 ]

consola . iniciar sesión ( Deno . args );

Referencias

  1. ^ Pablo, Matías R. (30 de julio de 1997). "NWDOS-TIP: consejos y trucos para Novell DOS 7, con Blick auf desdokumentierte detalles, errores y soluciones" . MPDOSTIP . Versión 157 (en alemán) (3  ed.). Archivado desde el original el 10 de septiembre de 2017 . Consultado el 6 de septiembre de 2014 .(Nota: NWDOSTIP.TXT es una obra exhaustiva sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características y aspectos internos no documentados. Forma parte de la colección MPDOSTIP.ZIP del autor, aún más extensa, que se mantuvo hasta 2001 y se distribuyó en numerosos sitios web en aquella época. El enlace proporcionado dirige a una versión anterior del archivo NWDOSTIP.TXT convertida a HTML).
  2. 1 2 "argparse — Analizador para opciones, argumentos y subcomandos de línea de comandos" . Documentación de Python v3.10.0 . Archivado del original el 1 de noviembre de 2012. Consultado el 15 de octubre de 2021 .
  3. Microsoft Corporation. "Información general sobre System.CommandLine" . learn.microsoft.com . Microsoft Learn . Consultado el 6 de diciembre de 2025 .
  4. "El libro de la C: argumentos para main" . Publications.gbdirect.co.uk . Consultado el 31 de mayo de 2010 .
  5. Un ejemplo de análisis de argumentos y opciones de C
  6. Proyecto POCO. "Clase Poco::Util::OptionProcessor" . docs.pocoproject.org . Bibliotecas POCO C++ . Consultado el 6 de diciembre de 2025 .
  7. Vladimir Prus. "Capítulo 28. Boost.Program_options" . boost.org/doc . Bibliotecas Boost C++ . Consultado el 6 de diciembre de 2025 .
  8. p-ranav. "argparse" . github.com . GitHub . Consultado el 6 de diciembre de 2025 .
  9. "Información general sobre System.CommandLine - .NET" . learn.microsoft.com . Consultado el 6 de diciembre de 2025 .
  10. Apache Commons (8 de noviembre de 2025). "Apache Commons CLI" . commons.apache.org . Apache Commons.
  11. "Kotlin: Sintaxis básica" . Consultado el 13 de mayo de 2022 .
  12. "Manual de PHP" . PHP . Consultado el 31 de mayo de 2010 .
  13. ^ wikilibros:Programación PHP/CLI
  14. "PHP: Getopt - Manual" .
  15. El manual de referencia de Racket, Análisis de la línea de comandos
  16. "Aceptación de argumentos de línea de comandos - El lenguaje de programación Rust" . doc.rust-lang.org . Consultado el 22 de diciembre de 2022 .
  17. "Crate clap" . docs.rs. clap. 19 de noviembre de 2025.
  18. "process.argv" . Documentación de Node.js v10.16.3 . Consultado el 3 de octubre de 2019 .
  19. "Cómo analizar los argumentos de la línea de comandos" . Documentación de la Fundación Node.js. Archivado del original el 17 de marzo de 2020. Consultado el 3 de octubre de 2019 .
  20. "Analizar argumentos de línea de comandos | Ejemplos de Bun" . Bun .
  21. «Deno.args» . docs.deno.com .
  22. "parseArgs de parse-args - @std/cli - JSR" . jsr.io .