[완료]egrep과 문자열 사용에 관하여.
안녕하세요. 가입한지 33주나 됐지만 그동안 한번도 활동하지 않다가
처음으로 글을 올리네요..
리눅스에서
쉘 스크립트를 작성하는 걸 하고 있는데 의문점이 생겨서 왜 그런지 궁금하여
글을 올리게 되었습니다.
의도한 것은 egrep으로 and 검색을 하기 위해서 egrep [찾는문자] [대상파일] | egrep [찾는문자] < 이걸 이용하여 스크립트를 작성하려는 것입니다.
--------------------------여기서부터 코드 시작 -----------------------------
for arg
do
case "$string" in
"" ) string="$arg" ;;
* ) string2="$string2 | egrep $arg" ;; <-문제가 되는 부분인데 .. 이런식으로 위에 처럼 문자열을 만들었습니다.
esac
done
str="$string"
if [ "$string2" = "" ]
then
egrep -i $str mydata | awk -f display.awk
else
egrep -i $str mydata $string2 | awk -f display.awk <-- 그리고 매개변수가 2개 이상일 경우 이걸 실행하도록 했는데.
fi 이것이 실행이 되면 문제가 생깁니다.
-----------------------------------코드 끝--------------------------------------------
<실행 예>
./program 123 45 이런식으로 실행을 하면
egrep: |: No such file or directory
egrep: egrep: No such file or directory
egrep: 45: No such file or directory
이런식으로 뜨네요.. mydata파일 내부에 분명 45라는 것도 존재하지만
왜 $string2 라는 변수에 문자열을 저장하고 그걸 egrep에 넣어서 쓰면 명령어로 인식을 못하고
저렇게 되는지 도무지 감을 못 잡겠습니다.
흠... 어떤 문제가 있는건가요. 제가 완전 초보자라 그런지 아무의심없이 될거같았던 것이 안되서 당황스럽고,, 질문할 사람도 없고
갑자기 예전에 가입했던 이 곳이 생각나서 글을 올려보았습니다.
이런 식의 질문이 이곳의 예의에 어긋나는게 아닐지 걱정스럽지만 도움을 주시면 감사하겠습니다 :)
str="ls"$str | more위는
위는 잘 동작하지만
요컨데, 변수 안에 들어 있는 파이프와 그 뒤에 오는 다른 명령어를 파이프로 취급하지 못하고 ls 의 인자로 넘겨버리는 걸 볼 수 있습니다.
해결책은 eval
:-D
좋은 하루 되세요!
감사합니다 ㅋㅋ
적절히 사용하여 프로그램 완성 했습니다.
댓글 달기