Мне нужно прочитать первую строку файла и сопоставить ее с текстом. Если текст совпадает, мне нужно выполнить определенную операцию.
Проблема возникает, если команда не может сравнить переменную со строкой.
file_content=$(head -1 ${file_name})
echo $file_content
if [[ $file_content = 'No new data' ]]; then
echo "Should come here"
fi
echo $file_content
if [ "${file_content}" = "No new data" ]; then
echo "Should come here"
fi
Блок if не работает. Я думаю, что значение, которое я захватываю в строке 1, имеет некоторые проблемы.
решение1
Скорее всего, первая строка содержит непечатаемые символы или начальные или конечные пробелы или пустые символы, отличные от пробела (вы забыли заключить переменную в кавычки при передаче в echo
). Вы также можете сначала очистить ее:
content=$(
sed '
s/[[:space:]]\{1,\}/ /g; # turn sequences of spacing characters into one SPC
s/[^[:print:]]//g; # remove non-printable characters
s/^ //; s/ $//; # remove leading and trailing space
q; # quit after first line' < "$file_name"
)
if [ "$content" = 'No new data' ]; then
echo OK
fi