2008-09-16

本物の配列

シェルスクリプトにおいてしばしば、$IFSevalを利用して疑似配列を扱う。疑似配列は疑似精液と同じくらい疑似なので、つまり疑似本番と同じくらい疑似である。だけど、本物の配列はかつてあり、ありつづけている。

#! /bin/sh

set -e

f() {
    if [ "$1" -eq "$2" ]; then
        return
    fi

    i="$1"
    s="$2"
    v="$3"
    shift 3

    printf '[%d:%s]\n' "$i" "$v"
    f `expr "$i" + 1` "$s" "$@" "$v"
}

f "0" "$#" "$@"

配列でなくリストというべきかもしれない(それとこれとどれほど違うだろう)。望むなら、execで末尾再帰、つまり、ほぼ無限が手に入る。そもそも、なんの役にたつのかと問う向きには応えよう。"$@"は本物の局所変数でもあるのだ。

0 件のコメント: