やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Bashで1文字ずつ表示するアニメーション

11行。

成果物

github.com

使い方

. anim_wait.sh
Wait "表示したい文字列。"
Wait "Wait時間を秒で指定可。" 0.25

コード

anim_wait.sh

Wait(){
    [ "$2" = '' ] && local waitTime=0.05
    [ "$2" != '' ] && local waitTime=$2
    local count=0
    while [ $count -lt ${#1} ]; do
        local target="${1:$count:1}"
        echo -n "$target"
        ((count++))
        sleep "$waitTime"
    done
}

${1:$count:1}がポイント。${変数名:インデックス:長さ}で部分文字列が取得できる。

参考になった記事はいくつかあったが、どれも問題がある。

日本語が化ける

文字列を1文字ずつに分解する - Qiita

fold

echo '日本語' | fold -s1

awk

echo '日本語' | awk -v FS='' '{
    for (i = 1; i <= NF; i++) printf $i;
}'

ファイルが必要

bashでファイルから1文字づつ読み込んで処理をさせる | 俺的備忘録 〜なんかいろいろ〜

tmpf=/tmp/tmp.txt
echo "日本語" > $tmpf
while IFS= read -rN1 char; do
    printf "$char";
    sleep 0.1;
done < $tmpf
  • 一時ファイル(/tmp/...)が必要
    • /tmp/をRAMディスクに割り当てれば可