かべ。

シェルスクリプトで RFC1123な日付のタイムゾーンの +0900 を得ようと思うと
なんか無駄に苦労するんですが、ましな解法ありますかね。

制約条件:
・date +% は使ってよい。 (POSIX?)
・date +%z は使わない (GNU date拡張?)
・printf(1)は使わない (sed,awkは許可)
・重量級スクリプト言語は反則 (perl,tcl,ruby,pythonなど)

GNU date は自明解 date +"%a, %d %b %Y %T %z" があるので退けます。


もちろん↓はdateを3回呼んでいるので時刻の変わり目では誤動作します。
==================
#!/bin/sh

( date +'%k %M'; TZ=GMT+0 date +'%k %M' ) | (
read LH LM; read GH GM;
Z=`expr '(' $LH '*' 60 + $LM ')' - '(' $GH '*' 60 + $GM ')'`
# clamp within 12hours (wrong)
if [ $Z -gt 720 ]; then Z=`expr $Z - 1440`; 
elif [ $Z -lt -720 ]; then Z=`expr $Z + 1440`;
fi
P="+"; if [ $Z -lt 0 ]; then P="-"; Z=`expr 0 - $Z`; fi
date +"%a, %d %b %Y %T "$P`expr $Z / 600``expr '(' $Z / 60 ')' % 10``expr '(' $Z % 60 ')' / 10``expr $Z % 10`
)
==================

数値演算が組み込みのcshだと
サブシェル中でif-elseがうまく書けなかったので挫折。

…条件のdate +% を禁止してもあんま手間は変わらないか?
-- 
kabe