「お昼の放送」の思い出

こんにちは、
昨日に続いてまたKシェルの質問です。

タイトルのとおりなのですが、
変数にはいっている文字列が、1文字か2文字か、という判定は可能でしょうか。
1文字の場合、頭に0を連結し、
2文字の場合はそのまま通すというものを作りたいのですが、参考になるものが探せませんでした。
(ex.変数に9が入っていたら、09、11ならそのまま)
ご存知の方、いらっしゃいましたらご教授願います。

(参考にできそうな本を教えて頂いたのですが、近所にはなく注文するとすると時間がかかってしまうので…;;)

A 回答 (4件)

こんにちは。

コマンド置換は「$((...))」ではなくて「$(...)」
(括弧は1重)でした。申し訳ありません。
これは「`...`」に比べて入れ子で何重にも実行できる点が有利です。
(ちなみに、bash でも「`...`」は推奨されない表記法です)

さて、ksh の機能だけを使ってご質問に真正面から取り組んでみます。
変数 var の文字数を調べ、1文字なら0パディングした結果を入れ直します。

case ${#var} in
1) var="0$var" ;;
2) ;; # 何もしない
esac

それでは。
    • good
    • 0

こんばんは、satosaya さん。

お礼どうもありがとうございました。
外部コマンドを使っていいのなら printf を使うのが
一番スマートだと思います。
ただそうなると欲が出てきて、AWK, Perl, Ruby などのスクリプト言語で
いろいろやりたくなってくるのですが(^^;

これは下の方々の回答の補足になりますが、ksh の機能だけを使って
変数 variable に格納された文字列の長さを知るには
「${#variable}」が使えます。ksh の機能を受け継いだ bash, zsh でも可能。

$ verylongword="floccinaucinihilipilification"
$ print ${#verylongword}
29
$ nagaitango="日本語はどうかな?"
$ print ${#nagaitango}
18

echo, `...` は ksh では「廃れた機能」として使わないほうがいいです。
それぞれ print, $((...)) を使ってください。
if, while などの条件では整数式を ((...)) で括って使ってください。

前回のご質問に関連して、任意の式を整数属性を持つ変数
intver に代入するには、「((intver=式))」あるいは「let intver=式」も使えます。

$ let day="09"
$ print $day
9
$ let anotherday='1 + 14'
$ print $anotherday
15

早く本が手元に届くといいですね。それでは。
    • good
    • 1

Kシェルとは直接関係ないですが、外部コマンドを使っていいなら、


今回は数値が相手のようですからprintfコマンドでどうでしょう。
a=9
b=`printf "%02d" $a`
あたりで行けると思います。
    • good
    • 0

Kシェル自体に文字の長さを求める機能があるかどうかは判りませんが、以下の方法で取得が可能です。


---------------------------
moji="ABCDEFG"
len=`expr $moji : '.*'`
echo LEN=$len
echo $moji
----------------------------
コピー&ペースト時は、全角スペースを半角に変えて下さい。
exprは:の両端の文字を比較し先頭から何文字が一致したかを返します。この場合、右側に.*(正規表現)を指定すると無条件に全て一致したことになり、結果的に左側の文字の桁数が返ります。$lenが求める結果です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報