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

标签 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 终端中运行我的文件时,我都可以将它简单地传递给我的函数以作为打字机进行动画处理。

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

怎么样

#!/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

关于bash:一次从字符串中读取一个字符的文本,带空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458743/

相关文章:

linux - 在数据文件中查找唯一值

c# - 如何在不复制的情况下从 char 数组创建字符串?

C++ 如何使用 find 函数在 char 数组中查找 char?

c++ - 使用 boost::this_thread::sleep_for() 和常规 sleep() 函数有什么区别?

ios - 有没有办法检查 iOS 设备是否已锁定/解锁?

ruby - 作为 Ruby/Rails 开发人员,zsh vs bash?有什么好处?

具有自定义输出的 man 的 bash 脚本

linux - 如何设置用户的权限,以便它可以执行 bash 脚本来读取其他用户的文件?

c - 使用 Valgrind 写入和读取错误

mysql - PHP 休眠函数 2 天时间?