よく使うのでメモとして掲載します。
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