アーカイブ

bashのfor文で配列やセパレータ付き文字列から各要素を取り出す

bashのfor文の仕様、使い方をmanを見て確認し、実際に配列や$PATH環境変数に対して使用してみました。
 
1)書式1
 
for name [ [ in [ word … ] ] ; ] do list ; done
 
①”word”を構成するリストから各要素が”name”変数に設定される。
 
②”list”内で、①で設定された”name”を使ってコマンド実行
 
サンプル1)
 
・環境変数PATHに設定されているディレクトリを1行ずつ”ls -ld ディレクトリ”で表示する。
 
・環境変数PATHは、”:”で区切られているので、IFS環境変数で区切り文字として”:”を指定する。

IFS=:
for dir in $PATH ; do
  ls -ld $dir
done

 
2)書式2
 
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
 
・expr1
最初に評価される算術式
 
・expr2
0と評価されるまで繰り返し評価される算術式。
その際にlistが実行され、expr3が実行される。
 
サンプル1)
 
・配列の各要素を一つずつ表示する。
 
・配列の各要素への参照は下記構文を使用。
${array[i]}
 
・配列のすべての要素の長さ下記構文を使用。
${#array[@]}

names=(one two three)
for (( i=0 ; i<${#names[@]}; i++ )) ; do
  echo ${names[i]}
done
関連記事の目次