シェルスクリプトでゼロ埋めいろいろ。

2010年2月26日 Linux, スクリプト関連, 雑記

2014/06/06 追記 :
この記事は車輪の再発明を試みた記事です。実際のスクリプトに組み込むのは不適切な内容になっています。
より簡単にゼロ埋めを実現する方法がありますので、組み込みの際はこちらの記事(ゼロ埋め再び。)を参照して下さい。

スクリプトに関して不明点等あるならメールかTwitterで直接質問してください。私はあなたのお友達ではありません。”内輪ノリ”を内輪以外に持ち出してはいけません。
お友達以外を相手に”内輪ノリ”でツッコミ記事を書いてリンクを貼るのは控えるべきです。記事が必要なら礼儀正しく丁寧に書くか、相手を特定しにくい形で書きましょう。事前に解決済みの案件ではないか、古い記事ではないかの確認も忘れずにしましょう。私はあなたのお友達ではありません。

ゼロ埋めの方法をいくつか考えてみた。
どれも引数で数値を与えてやると変数valにゼロ埋めされた数値が代入される。
個人的には四つ目が好き。

一つ目。

#!/bin/bash
if [ $1 -lt 10 ]
then
  val=`expr 000$1` #10未満
elif [ $1 -lt 100 ]
then
  val=`expr 00$1` #100未満
elif [ $1 -lt 1000 ]
then
  val=`expr 0$1` #1000未満
else
  val=`expr $1` #100以上
fi

二つ目。

#!/bin/bash
if [ $1 -lt 10 ]
then
  val=000$1 #10未満
elif [ $1 -lt 100 ]
then
  val=00$1 #100未満
elif [ $1 -lt 1000 ]
then
  val=0$1 #1000未満
else
  val=$1 #1000以上
fi

三つ目。

#!/bin/bash
case “$1” in
  ? ) val=000$1 ;; #10未満
  ?? ) val=00$1 ;; #100未満
  ??? ) val=0$1 ;; #1000未満
  * ) val=$1 ;; #1000以上
esac

四つ目。

#!/bin/bash
val=$1
for (( i = 0; i > $((4 – ${#1})); i++ ))
{
  val=0$val
}

一〜三つ目はどれもやり方としては同じなので四つ目だけ軽く説明。
といっても大したことはやってなくて、実行時の第一引数を変数valに代入して指定桁数から第一引数で与えられた値の文字数を引いた数の回数だけ0を追加するっていう操作。ちなみに太字部分が最終出力の桁数の指定。

今思いつくレベルではこれが一番スマートだと思う。コード的に。
キーを叩く回数も一番少ないし。

毎度のことながらインデントが全角になってます。もし万一使うような人がいるならタブか半角スペースに直して使ってください。

コメントは受け付けていません。