bash:一次从一个字符串中读取文本,带有空格

时间:2012-05-05 04:05:24

标签: bash char sleep ifs

我很无聊,并决定使用bash编写一个基于文本的冒险脚本。基本上,它应该在某些情况下为打字机制作动画,以进行戏剧性的叙事。我可以在这样的文件中手动执行此操作:

sleep 0.1 
echo -n "h"
sleep 0.1 
echo -n "e"
sleep 0.1 
echo -n "l"
sleep 0.1 
echo -n "l"
sleep 0.1 
echo -n "o"

你可以想象,这是非常乏味的。相反,我希望一次从字符串(或文件)中提取一个字符,并将sleep命令应用于每个字符。

到目前为止,我有以下内容,即从文件中读取。 IFS =允许空格保留,但不允许任何其他类型的空格(例如换行符)。

IFS=
while read -n1 achar
do
   echo $achar
done < aFile

有没有办法可以用它来获取所有空格?作为一个额外的问题,你能告诉我如何将它应用于用户定义的脚本,所以我不必从单独的文件中读取?所以,例如,假设我有一个名为“hello”的字符串,只要我在bash终端运行我的文件,我就可以简单地将它传递给我的函数来设置动画作为打字机。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:8)

怎么样

#!/bin/bash

function typewriter
{
    text="$1"
    delay="$2"

    for i in $(seq 0 $(expr length "${text}")) ; do
        echo -n "${text:$i:1}"
        sleep ${delay}
    done
}


typewriter "Typewriters are cool." .1
echo # <-- Just for a newline

答案 1 :(得分:0)

@der不需要使用tr -s [:blank:]将多个空格压缩到一个空格。

HTH。