Bash: 配列の添字の最大

| | コメント(0) | トラックバック(0)

bashでも配列が使えるので,

$ a[100]=a100

と実行すると,

$ echo ${a[100]}
a100

となる。Posix準拠shellなので当たり前なんだが,添字の最大値はどうしたら得られるのか,悩んだ。

${#a[@]}だと配列の数だし,上の場合は,1になる。${#a}は,配列要素の一番最初のa[0]の長さを示しており,${#a[0]}と同じ意味となり,何も設定されていない文字列の長さだから,0が返る。

$ echo ${#a[@]}
1

$ echo ${#a}
0

じゃあ,どうすれば良いのか?

 

結局,関数を作ってみた。

maxindex()
{
    para=$1
    ret=-1
    chk=$( eval "echo \${$para[@]}" )
    if [ ! -z "$chk"  ] ; then
        var=$(typeset -p $para)
        var=${var##*\[}
        var=${var%%\]=*}

        if [[ -n $var && -z ${var##*[[:digit:]]} ]] ; then
            ret=$var
        fi
    fi
    echo $ret
}

 

maxindex aを実行すると添字の最大値が得られる。

sedを使えば,1行くらい減らせるけど,スタートアップスクリプトで使いたいので,ファイルシステムがマウントされていないことを前提に,bashのスクリプトだけで書いてみた。

 

もっとスマートな方法は無いのか,考えているのだが,思いつかない。

 

トラックバック(0)

このブログ記事を参照しているブログ一覧: Bash: 配列の添字の最大

このブログ記事に対するトラックバックURL: http://www.aritia.org/mt/mt-tb.cgi/140

コメントする

2008年8月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

アーカイブ

ウェブページ

Powered by Movable Type 4.21-ja

Techonrati

Technorati search

» リンクしているブログ

このブログ記事について

このページは、Hizumiが2008年2月22日 02:28に書いたブログ記事です。

ひとつ前のブログ記事は「PC電源断の原因切り分けられない」です。

次のブログ記事は「AMAZON ランキング操作」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。