Bash(Shell)でディレクトリ、リストをforループする

よく使うのでメモとして掲載します。

Bash(Shell)でディレクトリ、リストをforループする サンプルコード


#!/bin/bash

echo "ディレクトリ直下のファイルをループ"
dir_path="sample_dir/*"
for dir in $dir_path; do
    echo "$dir"
done

echo --------------------------

# リスト定義
declare -a list=(
    "foo"
    "bar"
    "baz"
)

echo "リストをループする"
for row in "${list[@]}"; do
    echo "$row"
done

echo "インデックス付きでリストをループする"
for i in "${!list[@]}"; do
    echo "$i : ${list[$i]}"
done

echo --------------------------

echo "連番でループ{}"
for i in {0..3}; do
    echo ${i}
done

echo "連番でループ seq"
for i in $(seq 0 3); do
    echo "$i"
done

実行結果


# ディレクトリ直下のファイルをループ
sample_dir/sample_01.txt
sample_dir/sample_02.txt
--------------------------
# リストをループする
foo
bar
baz
# インデックス付きでリストをループする
0 : foo
1 : bar
2 : baz
--------------------------
# 連番でループ{ }
0
1
2
3
# 連番でループ seq
0
1
2
3


ディレクトリ直下のファイルをfor文でループ


#!/bin/bash

# ディレクトリ直下のファイルをループ
dir_path="sample_dir/*"
echo "\$dir_path -> " $dir_path
for dir in $dir_path; do
    echo "$dir"
done

# 結果
# 
# $dir_path ->  sample_dir/sample_01.txt sample_dir/sample_02.txt
# sample_dir/sample_01.txt
# sample_dir/sample_02.txt


リストをfor文でループ、インデックス付きfor文でループ

#!/bin/bash

# リスト定義
declare -a list=(
    "foo"
    "bar"
    "baz"
)

# リストをループする
echo "\$\"{list[@]}\" -> " "${list[@]}"
for row in "${list[@]}"; do
    echo "$row"
done

echo

# インデックス付きでリストをループする
echo "\$\"{!list[@]}\" -> " "${!list[@]}"
for i in "${!list[@]}"; do
    echo "$i : ${list[$i]}"
done

# 結果
# 
# $"{list[@]}" ->  foo bar baz
# foo
# bar
# baz

# $"{!list[@]}" ->  0 1 2
# 0 : foo
# 1 : bar
# 2 : baz


連番をfor文でループ


#!/bin/bash

# 連番でループ {}
echo "{0..3} -> " {0..3}
for i in {0..3}; do
    echo ${i}
done

echo

# 連番でループ seq
echo "\$(seq 0 3) -> " $(seq 0 3)
for i in $(seq 0 3); do
    echo "$i"
done

# 結果
#
# {0..3} ->  0 1 2 3
# 0
# 1
# 2
# 3

# $(seq 0 3) ->  0 1 2 3
# 0
# 1
# 2
# 3