シェルスクリプトにおいてしばしば、$IFS
やeval
を利用して疑似配列を扱う。疑似配列は疑似精液と同じくらい疑似なので、つまり疑似本番と同じくらい疑似である。だけど、本物の配列はかつてあり、ありつづけている。
#! /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 件のコメント:
コメントを投稿