48 votos

Bash: convertir argumentos de línea de comandos en una matriz

¿Cómo puedo convertir de argumentos de línea de comandos en un script de bash matriz?

Quiero aprovechar esta:

./something.sh arg1 arg2 arg3

y convertir a

myArray=( arg1 arg2 arg3 )

así que puedo usar myArray para su uso posterior en la secuencia de comandos.

Esto por LO anterior post viene cerca, pero no entra en cómo crear una matriz: ¿Cómo analizar los argumentos de línea de comandos en bash?

Necesito convertir los argumentos en un regular script de bash matriz; me doy cuenta de que podría utilizar otros lenguajes (Python, por ejemplo) sino que necesita hacerlo en bash. Supongo que estoy en busca de un "anexar" función o algo similar?

ACTUALIZACIÓN: también quería preguntar cómo comprobar cero argumentos y asignar un valor predeterminado de la matriz de valor, y gracias a la respuesta de abajo, fue capaz de conseguir este trabajo:

if [ "$#" -eq 0 ]; then
  myArray=( defaultarg1 defaultarg2 )
else
  myArray=( "$@" )
fi

67voto

kojiro Puntos 24374

En realidad sus argumentos de línea de comandos son prácticamente como un array ya. Al menos, usted puede tratar a la $@ variable como una matriz. Dicho esto, se puede convertir en un arreglo como este:

myArray=( "$@" )

Si sólo quieres escribir algunos argumentos y piensos en el $@ valor de uso set:

$ set -- apple banana "kiwi fruit"
$ echo "$#"
3
$ echo "$@"
apple banana kiwi fruit

La comprensión de cómo utilizar el argumento de la estructura es particularmente útil en POSIX sh, que no tiene nada más como una matriz.

23voto

Nahuel Fouilleul Puntos 3018

Tal vez esto puede ayudar a:

myArray=("$@") 

también se puede iterar sobre los argumentos por omisión 'en':

for arg; do
   echo "$arg"
done

será el equivalente

for arg in "${myArray[@]}"; do
   echo "$arg"
done

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X