나는 Apache의 mod-status 페이지에서 이와 같은 업데이트를 한 번에 확인하려고 합니다(이것은 단지 테스트 스크립트일 뿐입니다).
firstcontent=$(lynx -dump http://some-server/server-status-page)
echo $firstcontent > /tmp/myfirstcontentfiles.txt
nextcontent=$(lynx -dump http://some-server/server-status-page)
prevcontent=`cat /tmp/myfirstcontentfiles.txt`
#this always returns false, but their contents are same
if [ "$prevcontent" == "$firstcontent" ]; then echo "match"; fi
#but this returns true
if [ "$nextcontent" == "$firstcontent" ]; then echo "match"; fi
내 질문은 실제 반환 값을 얻어야 할 때 $prevcontent 및 $firstcontent 비교가 false를 반환하는 이유입니다. 파일에 저장할 때 뒤에서 무슨 일이 일어나고 있나요?
답변1
읽다공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?이유를 알아보세요. 1문장 버전은 다음과 같습니다. 변수 대체에는 항상 큰따옴표를 사용하세요.
echo "$firstcontent" >/tmp/myfirstcontentfiles.txt
대부분의 경우 작동합니다. 변수 값에서 공백을 축소하거나 와일드카드를 확장하지 않습니다. 그러나 이 방법은 여전히 뒤에 오는 빈 줄을 제거하고(명령 대체를 통해 가능) 일부 쉘에서는 이 echo
명령이 백슬래시를 확장합니다. 스크립트에서 명령의 원시 출력을 파일에 쓰는 가장 쉬운 방법은 쉘에 도달하기 전에 이 작업을 수행하는 것입니다.
firstcontent=$(lynx -dump http://some-server/server-status-page | tee /tmp/myfirstcontentfiles.txt)