GNU/Linux >> Tutoriels Linux >  >> Linux

comment décaler la valeur du tableau dans bash

Pour répondre à la question dans le titre, vous pouvez "décaler" un tableau avec la notation sous-chaîne/sous-tableau. (shift lui-même fonctionne uniquement avec les paramètres de position.)

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

De même, pour "éjecter" le dernier élément du tableau :a=("${a[@]:0:${#a[@]} - 1}" ) ou unset "a[${#a[@]}-1]"

Donc, si vous le vouliez, vous pourriez faire ceci :

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

Mais cela détruit les tableaux, donc une simple indexation comme d'habitude pourrait être meilleure. Ou peut-être utiliser un tableau associatif à la place :

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

Une remarque générale. Cela n'a pas de sens de définir un tableau comme celui-ci :

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

Vous feriez ceci à la place :

folderArray=(sdb sdc sdd sde sdf sdg)

Passons maintenant à votre question :

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

ou

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

Vous pouvez simplement boucler sur toutes les valeurs, aucun décalage nécessaire :

folderArray=(sdb sdc sdd sde sdf sdg)

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

Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Comment écrire une boucle dans Bash

  3. Comment créer un tableau d'éléments uniques à partir d'une chaîne/tableau dans Bash ?

  4. Comment détecter Bash>=4.0 ?

  5. Comment puis-je obtenir des valeurs uniques à partir d'un tableau dans Bash ?

Comment lire un fichier ligne par ligne dans Bash

Comment comparer des chaînes dans Bash

Tableaux bash

Tableau associatif dans Bash

Comment exécuter un script bash

Comment définir une variable d'environnement dans Bash