vectores recorrer ejemplos arreglos array argumentos arrays bash shell

arrays - recorrer - variables en bash



Convierte argumentos de lĂ­nea de comando en una matriz en Bash (5)

Aquí hay otro uso:

#!/bin/bash array=( "$@" ) arraylength=${#array[@]} for (( i=1; i<${arraylength}+1; i++ )); do echo "${array[$i-1]}" done

¿Cómo convierto los argumentos de línea de comandos en una matriz de script bash?

Quiero tomar esto:

./something.sh arg1 arg2 arg3

y convertirlo a

myArray=( arg1 arg2 arg3 )

para que pueda usar myArray para un uso posterior en el script.

Esta publicación SO anterior se acerca, pero no explica cómo crear una matriz: ¿cómo puedo analizar los argumentos de línea de comando en Bash?

Necesito convertir los argumentos en una matriz de script bash regular; Me doy cuenta de que podría usar otros lenguajes (Python, por ejemplo) pero necesito hacer esto en bash. Supongo que estoy buscando una función de "agregar" o algo similar.

ACTUALIZACIÓN: también quería preguntar cómo comprobar cero argumentos y asignar un valor de matriz predeterminado, y gracias a la respuesta a continuación, pude hacer que esto funcione:

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


En realidad, se puede acceder a la lista de parámetros con $1 $2 ... etc.
Lo cual es exactamente equivalente a:

${!i}

Entonces, la lista de parámetros podría cambiarse con set,
y ${!i} es la forma correcta de acceder a ellos:

$ set -- aa bb cc dd 55 ff gg hh ii jjj kkk lll $ for ((i=0;i<=$#;i++)); do echo "$#" "$i" "${!i}"; done

12 1 aa 12 2 bb 12 3 cc 12 4 dd 12 5 55 12 6 ff 12 7 gg 12 8 hh 12 9 ii 12 10 jjj 12 11 kkk 12 12 lll

Para su caso específico, esto podría usarse (sin la necesidad de matrices), para establecer la lista de argumentos cuando no se dio ninguno:

if [ "$#" -eq 0 ]; then set -- defaultarg1 defaultarg2 fi

lo que se traduce a esta expresión aún más simple:

[ "$#" == "0" ] && set -- defaultarg1 defaultarg2


En realidad, sus argumentos de línea de comando son prácticamente como una matriz. Al menos, puede tratar la variable $@ muy parecida a una matriz. Dicho eso, puedes convertirlo en una matriz real como esta:

myArray=( "$@" )

Si solo desea escribir algunos argumentos y enviarlos al valor $@ , use set :

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

Comprender cómo usar la estructura de argumentos es particularmente útil en POSIX sh, que no tiene nada más que una matriz.


Más fácil aún, puede operar directamente en $@ ;)

Aquí es cómo hacer pasar una lista de argumentos directamente desde el prompt:

function echoarg { for stuff in "$@" ; do echo $stuff ; done ; }

echoarg Hey Ho Lets Go Hey Ho Lets Go


Tal vez esto puede ayudar:

myArray=("$@")

también puede iterar sobre argumentos omitiendo ''in'':

for arg; do echo "$arg" done

será equivalente

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