こんな感じです。
Bashで動きます。
使い方
$ typing [文字列] [表示間隔(s)]
中身
#!/bin/bash
if [ $# -lt 2 ]; then
echo "Few arguments!" 1>&2
exit 1
fi
input=$1
length=$((${#input} - 1)) # (1)
wait_time=$2
for i in `seq 0 1 $length`
do
# input から1文字切り出し、output に結合する
output=$output${input:$i:1} # (2)
echo -en $output
if [ $i -ne $length ]; then
# カーソルを行頭に戻す
echo -en '\r'
# 指定した時間待機
sleep $wait_time
fi
done
echo
解説
Bashには変数を処理するための便利な機能が沢山あります。
今回のスクリプトでは、__算術式展開__と__パラメータ展開__を使用しています。
(1) 9行目 $((${#input} - 1))
${#変数名}
と書くと、変数に格納された文字数を取得できます。(パラメータ展開)
ここでは${#input}
で表示する文章の文字数を取得しています。
また、$((算術式))
と書くことで、算術式の結果を得ることができます。(算術式展開)
文字配列のインデックスに使用するため、$((${#input} - 1))
で上記の文字数 - 1の数値を計算しています。
(2) 14行目 ${input:$i:1}
${変数名:開始位置:長さ}
で、変数に格納された文字を切り取ることができます。(パラメータ展開)
開始位置はインデックスで表されるので、0から数えます。
例えば"helloworld"
という文字列が格納された変数$var
に対して、"world"
という文字列を切り取りたい場合は、
${var:5:5}
と書きます。
ここでは、変数__$input
に対して、ループ変数$i
__をインデックスにして、そこから__1__文字を切り出したいので、
${input:$i:1}
としています。
使い道
なんの意味もないジョークコマンドですが、fortune
コマンドなんかと組み合わせて遊んだりできます。
Shellのmotdとして使うことで、厨二魂をくすぐることもできます。
以上です。