이 문제에 대해 도와주세요.
나는 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
... 블록 다음에 반환 값을 사용하고 싶을 수도 있다는 생각이 들었습니다 . 이 경우에는 값을 저장하고 계속 진행하세요.if
fi
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";}}'