Синтаксическая ошибка рядом с неожиданным токеном "done" --при чтении строки

Я понял:

Изображение использовало цветовой профиль Adobe RGB, который, по-видимому, не обрабатывается должным образом. Я преобразовал в sRGB, и нет никаких проблем.

0
26.10.2020, 21:52
2 ответа

syntax error near unexpected token 'done' — это ошибка, которую выдает Bash, когда видит зарезервированное слово doneбез соответствующего doперед ним. Это не имеет ничего общего с кавычками, но, скорее всего, во многом связано с тем, что ваш файл имеет окончания строк CRLF в стиле DOS/Windows -. Возврат каретки (CR,\r)воспринимается оболочкой как обычный символ, поэтому она видит не зарезервированное слово do, а do\r. С другой стороны, в последней строке он распознает done, поскольку он отделен от конца строки, а CR там с этим пробелом.

Запустите сам файл сценария через dos2unix. Не добавляйте команду dos2unixв файл сценария.

3
18.03.2021, 22:54

Я бы использовал

#!/bin/sh
program_input="$1"
input="$2"
cat "$input" | while read line
do
    result=$(echo "$line" | program -sli "$program_input")
    if [ "$result" = "" ] 
    then
        printf "$line\t=>\t *none* 0\n"
    else
        printf "$line\t=>\tyes\n"
    fi
done
  • result=$(... )предпочтительнее результата =...(обратная цитата)

команда

echo -e `"$line"\t=>\tyes`

означает:

  • выполнить"$line"\t=>\tyes
  • перенаправление вывода с "$line" =наyes
  • Результат
  • иecho -e whatever result(должен быть пустым, либо stdout пойман в yes, либо stderr uncaught ).

Ты этого хочешь?

пуристы могут возразить по поводу бесполезного использования кота в качестве

cat "$input" | while read file
do

done

можно заменить на

while read file
do

done < "$input"

однако, если в цикле while слишком много строк, может быть непросто угадать, что читает while.

1
18.03.2021, 22:54

Теги

Похожие вопросы