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