配列変数への文字列の代入

今日もLinuxのシェルスクリプト、配列変数のお勉強です。

今回は、findコマンドで取得したディレクトリ名を配列変数へ代入して表示するスクリプトです。

#!/bin/bash
declare -a dir=()
declare -i count
for DIR in $(find . -maxdepth 1 -type d)
do
    dir=("${dir[@]}" `basename ${DIR}`)
    echo "${dir[count]}"
    count=count+1
done

実は以下のように書けば、同じことをするのに配列変数は関係ないのですけれどね。コードの可搬性、拡張性を考えると配列変数を使うこともあるのかな・・・と。

#!/bin/bash
for DIR in $(find . -maxdepth 1 -type d)
do
    echo `basename $DIR`
done

実際の結果は、隠しディレクトリも表示されます。隠しディレクトリを除外したいときには、findコマンドの -not -regex オプションでドットの付くファイルを指定します。

#!/bin/bash
for DIR in $(find . -maxdepth 1 -type d -not -regex ".*\/\..*")
do
    echo `basename $DIR`
done

maxdepth の値を変えるとさらに掘り進められます・・・が、表示結果があまりエレガントではありません。ではforループをネストすれば良いのでしょうが、それもあまり意味がないのかも知れません。

# sh findDir.sh
public_html
samba
test
ダウンロード
テンプレート
デスクトップ
ドキュメント
音楽
画像
公開

参考URL

http://qiita.com/b4b4r07/items/e56a8e3471fb45df2f59
http://d.hatena.ne.jp/yohei-a/20091028/1256707671
ttp://tapira.hatenablog.com/entry/2014/10/02/120550