■記載方法
for 変数 in 範囲
do
done
※for文などで文字列の区切り文字を空白にしたくない場合は、IFSの値を変更すること。
よくある例:コマンド実行の結果を行ごとに処理したいので、改行を区切り文字とする。
IFS='
'
■配列の中身を全て書き出す場合
array=('10' '100')
for item in "${array[@]}"; do
echo $item
done
■コマンドの結果を利用する場合
for file in `ls` #この場合だとワイルドカード(*)でも同じ。空白文字を扱える分、ワイルドカードを用いた方が良い。
do
echo $file #何回目のループかをとりたい時は、ループ内にi=$(($i+1))とすることでカウントアップ可能。
done
■コマンドの結果を利用する場合2(引数の数値に5加算した数値までの連番のファイルを作成し、ファイル数を表示させる)
i=$1
for test in `seq $i $[$i+5]`
do
touch $test
done
※seqのかわりに、ブレース展開で`eval echo {$1..$((1+5))}`のようにも書ける。
■コマンドの結果を利用し、配列インデックスでループを回す
array=(`ls *.txt`)
array_num=`expr ${#array[@]} - 1` #syntax errorになるので、exprは演算子と数字をくっつけないこと
for i in `seq 0 1 ${array_num}`; do
echo ${array[$i]}
done
■コマンドの結果を利用し、配列インデックスでループを回す2
array=(`ls *.txt`)
for ((i=0; i < ${#array[@]}; i++))
do
echo ${array[$i]}
done
■インクリメントする
for test in `seq 0 5`
do
hoge=$((hoge + 1)) #exprより早いらしい。
done
最終更新:2020年10月17日 10:59