GNU/Linux >> Tutoriales Linux >  >> Linux

cómo cambiar el valor de la matriz en bash

Para responder a la pregunta del título, puede "desplazar" una matriz con la notación de subcadena/subarreglo. (shift funciona solo con los parámetros posicionales).

$ a=(a b c d e)
$ a=("${a[@]:1}")
$ echo "${a[@]}"
b c d e

De manera similar, para "sacar" el último elemento de la matriz:a=("${a[@]:0:${#a[@]} - 1}" ) o unset "a[${#a[@]}-1]"

Entonces, si quisieras, podrías hacer esto:

a=(foo bar doo)
b=(123 456 789)
while [ "${#a[@]}" -gt 0 ] ; do
    echo "$a $b"
    a=("${a[@]:1}")
    b=("${b[@]:1}")
done

Pero destruye las matrices, por lo que solo indexar como de costumbre podría ser mejor. O tal vez use una matriz asociativa en su lugar:

declare -A arr=([foo]=123 [bar]=456 [doo]=789)

Una observación general. No tiene sentido definir una matriz como esta:

folder_mount_point_list="sdb sdc sdd sde sdf sdg"
folderArray=( $folder_mount_point_list )

En su lugar, harías esto:

folderArray=(sdb sdc sdd sde sdf sdg)

Ahora a tu pregunta:

set -- sdb sdc sdd sde sdf sdg
for folder_name; do
    mkdir "/data/$folder_name"
done

o

set -- sdb sdc sdd sde sdf sdg
while [ $# -gt 0 ]; do
    mkdir "/data/$1"
    shift
done

Simplemente puede recorrer todos los valores, sin necesidad de cambios:

folderArray=(sdb sdc sdd sde sdf sdg)

for folder in "${folderArray[@]}"; do
    mkdir "/data/$folder"
done

Linux
  1. Cómo usar los comandos del historial de Bash

  2. Cómo escribir un bucle en Bash

  3. ¿Cómo depurar un script Bash?

  4. ¿Cómo crear una matriz de elementos únicos a partir de una cadena/matriz en Bash?

  5. ¿Cómo usar kill SIGUSR2 en bash?

Cómo leer un archivo línea por línea en Bash

Cómo comparar cadenas en Bash

Arreglos bash

Matriz asociativa en Bash

Cómo ejecutar un script Bash

Cómo establecer la variable de entorno en Bash