Ich muss die erste Zeile einer Datei lesen und sie mit einem Text abgleichen. Wenn der Text übereinstimmt, muss ich eine bestimmte Operation ausführen.
Das Problem besteht darin, dass der Befehl die Variable nicht mit der Zeichenfolge vergleichen kann.
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
Der if-Block funktioniert nicht. Ich glaube, der Wert, den ich in Zeile 1 erfasse, weist einige Probleme auf.
Antwort1
Höchstwahrscheinlich enthält die erste Zeile nicht druckbare Zeichen oder führende oder nachfolgende Leerzeichen oder andere Leerzeichen als Leerzeichen (Sie haben vergessen, die Variable bei der Übergabe an in Anführungszeichen zu setzen echo
). Sie könnten sie auch zuerst bereinigen:
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