Bashで1文字ずつ表示するアニメーション
11行。
成果物
使い方
. 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}
がポイント。${変数名:インデックス:長さ}
で部分文字列が取得できる。
他
参考になった記事はいくつかあったが、どれも問題がある。
日本語が化ける
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ディスクに割り当てれば可