Unix에서 마지막 반환 값 캡처

Unix에서 마지막 반환 값 캡처

이 문제에 대해 도와주세요.

나는 grep test file.txt를 수행하고 있으며 전체 값을 캡처하여 인쇄하고 싶습니다. 나는 이것을하고있다.

grep test file.txt
if [ "$?" -eq 0]
then
echo success
else
echo fail
fi

이 코드에서는 grep이 값을 반환하는지 여부에 관계없이 종료 코드는 0이며 이는 명령이 성공했음을 나타냅니다.

실제 코드에서 grep을 10번 정도 반복했지만 작동하지 않기 때문에 다음을 수행하고 싶지 않습니다.

a=`grep test file.txt`
if [ "$a" -eq "" ]
then
echo fail
else
echo success
fi

나는 이와 같은 간단한 해결책을 찾고 있습니다.

echo $(anything) 은 값을 캡처해야 합니다.

답변1

귀하의 결과가 내 결과와 일치하지 않습니다.

echo 'some test here' > file.txt
grep test file.txt
echo $?    # returns 0

echo 'something else here' > file.txt
grep test file.txt
echo $?    # returns 1

또한 전체 코드 예제를 실행하면 키워드가 파일에 있는지 여부에 따라 "성공" 또는 "실패"가 표시됩니다. ( 0와 사이에 누락된 공백을 추가했습니다. ]그렇지 않으면 오류가 발생 -bash: [: missing `]'하고 이를 보고하지 않았기 때문입니다.)

grep test file.txt
if [ "$?" -eq 0 ]
then
    echo success
else
    echo fail
fi

grep그러나 스타일 제안으로 다음과 같이 명령을 직접 테스트하겠습니다 .

if grep test file.txt
then
    echo success
else
    echo fail
fi

grep... 블록 다음에 반환 값을 사용하고 싶을 수도 있다는 생각이 들었습니다 . 이 경우에는 값을 저장하고 계속 진행하세요.iffi

grep test file.txt
ss=$?
if [ 0 -eq $ss ]
then
    echo success
else
    echo fail
fi
# Here $ss still contains the return value from grep

답변2

space과 사이에 하나를 추가 하면 원래 코드가 예상대로 작동해야 합니다.0]

grep test file.txt
if [ "$?" -eq 0 ]
then
echo success
else
echo fail
fi

답변3

grep test file.txt
if [ "$?" -eq 0]
then
  echo success
  exitcode=0
else
  echo fail
  exitcode=1 
fi
exit ${exitcode}

당신이 무엇을 찾고 있는지 잘 모르겠지만, 명령과 동일한 코드로 스크립트를 종료하려면 grep이 방법이 도움이 될 것입니다.

다른 것을 찾고 있다면 자신에 대해 더 잘 설명해야 합니다.

답변4

반환 코드에 의존하는 대신 awk를 통해 파이프하는 것이 가능합니다.

grep posix test_file.txt|awk 'BEGIN{matches=0}{matches++}END{if(matches>0){print "success";}else{print "fail";}}'

첫 번째 일치 항목만 인쇄합니다.

grep testvalue test_file.txt|awk 'BEGIN{matches="";}{matches=$0;}END{if(matches!=""){print "success";print matches;}else{print "fail";}}'

그리고 값 캡처 기능을 통해 각 grep 일치를 표시합니다.

grep testvalue test_file.txt|awk 'BEGIN{matches="";}{matches=matches $0 "\n";}END{if(matches!=""){print "success";print matches;}else{print "fail";}}'

관련 정보