対象:csh、tcsh
Cシェルの日付計算ジ時の0の扱い
dateコマンドで日付や時刻を取得した場合、ゼロ付きというかゼロで先頭を埋めて返ってくるものがあります。man dateを見てください。
       %H     hour (00..23)
       %I     hour (01..12)
       %j     day of year (001..366)
       %k     hour ( 0..23)
       %l     hour ( 1..12)
       %m     month (01..12)
       %M     minute (00..59)
       %S     second (00..60)
抜粋したものを載せました。
時などは、%H の代わりに %k を使うなどすれば良いのですが、分や秒はどうしても0が付く場合があります。0が付いたままシェルの中で計算するとエラーになる場合があります。下記に例を示します。
% @ b = 8 + 1 % echo $b 9 % @ b = 08 + 1 @: 番号が正しい書式になっていません.
例では 8 と 08 で比較していますが、二桁であればうまく動いてしまいます。
そこで、先頭から続く0を考慮する必要があります。やり方としては2つあります。サンプルにあるように @を 使いたい場合と、@ をやめる方法です。
|  |  | 
|  | |
@を使う場合
@ に与える変数からあらかじめ0を取り除きます。やり方は、bc コマンドを使い、値に影響しない0を足すという処理をさせます。
% set a = 08 % @ b = $a + 1 @: 番号が正しい書式になっていません. % set a = `echo $a + 0 | bc` % @ b = $a + 1 % echo $b 9
@をやめる場合
いっそのこと、@ を使うのをやめます。前者の解決策にも出てきた bc に置き替えます。expr コマンドでもいいですが、ちょっと複雑な計算式になると対応できないので、bc にしておいたほうが無難です。
% set a = 08 % @ b = $a + 1 @: 番号が正しい書式になっていません. % set b = `echo $a + 1 | bc` % echo $b 9
いかがでしょうか、bc はプロセスを起こす必要があるので、ループ中で使ったりすると性能が犠牲になりますが、単発の計算であれば思ったとおりの計算をしてくれます。

