GNU/Linux >> Linux Esercitazione >  >> Linux

come spostare il valore dell'array in bash

Per rispondere alla domanda nel titolo, puoi "spostare" un array con la notazione sottostringa/sottoarray. (shift stesso funziona solo con i parametri posizionali.)

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

Allo stesso modo, per estrarre l'ultimo elemento dall'array:a=("${a[@]:0:${#a[@]} - 1}" ) o unset "a[${#a[@]}-1]"

Quindi, se lo desideri, puoi farlo:

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

Ma distrugge gli array, quindi solo l'indicizzazione come al solito potrebbe essere migliore. O forse usa invece un array associativo:

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

Un'osservazione generale. Non ha senso definire un array come questo:

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

Faresti invece questo:

folderArray=(sdb sdc sdd sde sdf sdg)

Passiamo ora alla tua domanda:

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

Puoi semplicemente scorrere tutti i valori, senza bisogno di spostamenti:

folderArray=(sdb sdc sdd sde sdf sdg)

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

Linux
  1. Come usare i comandi della cronologia di Bash

  2. Come scrivere un ciclo in Bash

  3. Bash:Maiusc+tasti freccia Crea A,b,c,d?

  4. Come posso ottenere valori univoci da un array in Bash?

  5. Come dichiarare un array 2D in bash

Come leggere un file riga per riga in Bash

Come confrontare le stringhe in Bash

Matrici Bash

Matrice associativa in Bash

Come eseguire uno script Bash

Come impostare la variabile d'ambiente in Bash