скрипт bash с использованием espeak произносит только первое слово

скрипт bash с использованием espeak произносит только первое слово

Я пишу скрипт bash для преобразования текстов песен в аудиоклипы с помощью espeak. Проблема в том, что espeak произносит только первое слово, а не строку за строкой, которую я читаю. Я пробовал помещать строки в файл с кавычками, но это не решило проблему.

Вот мой bash-скрипт:

#!/bin/bash
input="$1"
##input="/path/to/txt/file"
while IFS= read -r line
do
  echo "$line"
  espeak -k cantonese $line

done < "$input"

Вот текстовый файл построчно:

"Work it"
"Make it"
"Do it"
"Make us"
"Harder"
"Better"
"Faster"
"Stronger"

Как заставить espeak произнести каждое слово?

Обратите внимание, что при чтении файла с помощью этой -fопции произносится каждое слово.

решение1

Вместо:

espeak -k cantonese $line

Использовать:

espeak -k cantonese "$line"

Когда вы пропускаетедвойные кавычкивокруг $line, оболочка выполняетразделение словпо результатамрасширение параметра, и каждое слово передается как отдельный аргумент командной строки в espeak. espeakКоманда произносит только первый аргумент. Написание "$line"вместо $lineподавляет разбиение слов, в результате чего весь текст, сохраненный в lineпараметре, передается как один аргумент в espeak. (Это также подавляетподстановка(Это еще одна ситуация, которую вы не хотите, чтобы она произошла, хотя ваши тестовые входные данные, скорее всего, пока не вызвали ее.)

Это происходит даже в более простых случаях использования espeak. Например, espeak hello worldговорит просто «привет», в то время как espeak 'hello world'или espeak "hello world"говорит «привет, мир».

Что касается того, чтодобрыйцитатиспользовать, причина писать "$line", а не чем '$line', заключается в том, чтоодинарные кавычкислишком мощные для того, что вам нужно. Они подавят разделение слов и подстановку, но они будуттакжеподавить расширение параметра. Таким образом '$line', с помощью espeakкоманда увидит буквальный текст $lineвместо текста, содержащегося в lineпараметре.

Связанный контент