链接 Linux 终端命令

链接 Linux 终端命令

我有一个功能可以让我的 EV3 说话

speak(){ espeak -a 200 -s 130 -v la --stdout "$@" | aplay; }

它的工作原理很简单

speak "Say this"

我想让它说出文件的内容,所以我有这个

printf '%b\n' "$(cat joyPhrase)"

如何将 printf 的输出放入发言的引号中?

答案1

您可以转义双引号

printf '%b\n' "\"$(cat joyPhrase)\""

在我的机器上

$ echo this is a file >> testfile
$ printf '%b\n' "\"$(cat testfile)\""
"this is a file"

您可以使用重定向来代替使用 cat:

$ printf '%b\n' "\"$(< testfile)\""
"this is a file"

答案2

espeak支持使用--stdin从管道读取,因此一种选择是更改函数调用以使用它而不是参数,并将 printf 输出通过管道传输到您的函数中:

speak(){ espeak -a 200 -s 130 -v la --stdout --stdin | aplay; }
printf '%b\n' "$(cat joyPhrase)" | speak

或者,您可以将其他命令的输出传递给speak的参数,如下所示(尽管如果有控制字符,则不太可能起作用):

speak $(printf '%b\n' "$(cat joyPhrase)")

相关内容