![파일의 첫 번째 줄을 읽고 이를 쉘 파일의 문자열과 비교합니다.](https://linux55.com/image/109803/%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%A4%84%EC%9D%84%20%EC%9D%BD%EA%B3%A0%20%EC%9D%B4%EB%A5%BC%20%EC%89%98%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EA%B3%BC%20%EB%B9%84%EA%B5%90%ED%95%A9%EB%8B%88%EB%8B%A4..png)
파일의 첫 번째 줄을 읽고 텍스트와 일치시켜야 합니다. 텍스트가 일치하면 특정 작업을 수행해야 합니다.
문제는 명령이 변수를 문자열과 비교할 수 없는 경우입니다.
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
블록이 작동하지 않는 경우. 첫 번째 행에서 캡처하는 값에 문제가 있는 것 같습니다.
답변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