Shell,如何从 $line1="Test this...test this!" 中提取字母,并一一打印

Shell,如何从 $line1="Test this...test this!" 中提取字母,并一一打印

我正在写一个剧本,我想给它增添一点趣味。

我需要的是一个循环,它一次获取一个字母(包括空格),然后将其写在屏幕上,就像旧打字机一样。

我会在打字之间写一些暂停/睡眠,这样看起来就很复古。

答案1

如果您不介意不使用纯 shell 脚本(即,您可以混合使用 awk 或 perl),这里是一个使用 awk 的示例:

echo "This is... test this" |awk '{
  for (i=1; i <= length($0); i++) {
    printf substr($0,i,1);
    system("sleep 0.1");
  }
  print "";
}'

答案2

有一些 GNU 实用程序(例如pv可以执行该任务echo "$line1" | pv -qL 10),但如果您愿意,可以在 shell 中执行

#!/bin/bash
while [[ -n "$1" ]]
do
 sleep ${2:-"0.2"}
 printf "%c" "$1"
 temp=${1#?}
 set -- "$temp" "$2"
done
echo

用法:script.name 'text in single quotes' [interval time in seconds][1]如果您想使用变量,请执行相同的操作:

line1='Test this… test this!'
script.name "$line1" 0.3

[1]:interval time in seconds可选,允许小数

相关内容