GNU/Linux >> Linux の 問題 >  >> Linux

bashで配列値をシフトする方法

タイトルの質問に答えるには、部分文字列/部分配列表記を使用して配列を「シフト」できます。 (shift それ自体は位置パラメータのみで機能します。)

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

同様に、配列から最後の項目を「ポップ」するには:a=("${a[@]:0:${#a[@]} - 1}" ) または unset "a[${#a[@]}-1]"

そのため、必要に応じて次のようにすることもできます:

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

ただし、配列が破棄されるため、通常どおりインデックスを付けるだけの方がよい場合があります。または、代わりに連想配列を使用することもできます:

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

一般的な意見。次のように配列を定義しても意味がありません:

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

代わりにこれを行います:

folderArray=(sdb sdc sdd sde sdf sdg)

では、あなたの質問に答えてください:

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

または

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

すべての値を単純にループすることができ、シフトは必要ありません:

folderArray=(sdb sdc sdd sde sdf sdg)

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

Linux
  1. Bashでループを作成する方法

  2. Bashスクリプトをデバッグする方法は?

  3. バッシュを検出する方法>=4.0?

  1. Bash履歴コマンドの使用方法

  2. Bash:Shift +矢印キーでA、b、c、dを作成しますか?

  3. bashでkill SIGUSR2を使用するには?

  1. Bashの文字列/配列から一意の要素の配列を作成するにはどうすればよいですか?

  2. Bashの配列から一意の値を取得するにはどうすればよいですか?

  3. bashで2D配列を宣言する方法