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のスクリプトだけで書いてみた。
もっとスマートな方法は無いのか,考えているのだが,思いつかない。

コメントする