GNU/Linux >> Znalost Linux >  >> Linux

jak posunout hodnotu pole v bash

Chcete-li odpovědět na otázku v nadpisu, můžete "posunout" pole se zápisem podřetězec/podřádek. (shift sám pracuje pouze s pozičními parametry.)

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

Podobně pro „vypnutí“ poslední položky z pole:a=("${a[@]:0:${#a[@]} - 1}" ) nebo unset "a[${#a[@]}-1]"

Takže pokud byste chtěli, můžete udělat toto:

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

Ale vyhazuje pole do koše, takže pouhé indexování jako obvykle může být lepší. Nebo možná místo toho použijte asociativní pole:

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

Obecná poznámka. Nemá smysl definovat pole takto:

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

Místo toho byste udělali toto:

folderArray=(sdb sdc sdd sde sdf sdg)

Nyní k vaší otázce:

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

nebo

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

Všechny hodnoty můžete jednoduše procházet smyčkou, není třeba je posouvat:

folderArray=(sdb sdc sdd sde sdf sdg)

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

Linux
  1. Jak napsat smyčku v Bash

  2. Jak vytvořit pole jedinečných prvků ze řetězce/pole v Bash?

  3. Jak zjistit Bash>=4.0?

  1. Jak používat příkazy historie Bash

  2. Jak zkrátit Bash Prompt v Linuxu?

  3. Jak ladit Bash skript?

  1. Bash:Shift+šipky Udělat A,b,c,d?

  2. Jak mohu získat jedinečné hodnoty z pole v Bash?

  3. Jak deklarovat 2D pole v bash