我有一个功能可以让我的 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)")