GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verschieben Sie den Array-Wert in der Bash

Um die Frage im Titel zu beantworten, können Sie ein Array mit der Substring/Subarray-Notation "verschieben". (shift selbst funktioniert nur mit den Positionsparametern.)

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

Ähnlich, um das letzte Element aus dem Array zu 'knallen':a=("${a[@]:0:${#a[@]} - 1}" ) oder unset "a[${#a[@]}-1]"

Wenn Sie also wollten, könnten Sie Folgendes tun:

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

Aber es ruiniert die Arrays, also könnte es besser sein, einfach wie gewohnt zu indizieren. Oder verwenden Sie stattdessen ein assoziatives Array:

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

Eine allgemeine Bemerkung. Es macht keinen Sinn, ein Array wie folgt zu definieren:

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

Sie würden stattdessen Folgendes tun:

folderArray=(sdb sdc sdd sde sdf sdg)

Nun zu Ihrer Frage:

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

oder

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

Sie können einfach alle Werte durchlaufen, kein Verschieben erforderlich:

folderArray=(sdb sdc sdd sde sdf sdg)

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

Linux
  1. Wie schreibe ich eine Schleife in Bash?

  2. Wie kürze ich die Bash-Eingabeaufforderung unter Linux?

  3. Wie debuggt man ein Bash-Skript?

  4. Bash:Umschalt+Pfeiltasten Machen A,b,c,d?

  5. wie benutzt man kill SIGUSR2 in bash?

So lesen Sie eine Datei Zeile für Zeile in Bash

So vergleichen Sie Zeichenfolgen in Bash

Bash-Arrays

Assoziatives Array in Bash

So führen Sie ein Bash-Skript aus

So setzen Sie die Umgebungsvariable in Bash