쉘스크립트 문의드립니다.
글쓴이: eaught / 작성시간: 화, 2014/05/13 - 4:22오후
쉘을 작성중
grep 명령어를 통해서 들어온 값을 변수에 넣어 활용하고자 합니다.
그래서 쉘에서 다음과 같은 명령어를 사용하였습니다.
EX )
DATA=`grep -ir find_data file_name.txt`
echo $DATA;
문제는 grep을 통해서 들어온 값이 라인단위로 개행이 되어 들어오지 않고, 한줄에 걸쳐 변수로 들어와 버립니다.
제가 원한건 개행단위로 처리를 해야 하는데 어찌 해야 하는지 아시는분 계시는지요??
Forums:
잘 알지는 못하지만 생각해 보건대, 개행문자(\n,
잘 알지는 못하지만 생각해 보건대,
개행문자(\n, new line)를 delimeter로 사용해서 split하면 되지 않을까요?
IFS= DATA=`grep -ir find_data
IFS= DATA=`grep -ir find_data file_name.txt`
Word Splitting이 일어나지 않게 위와 같이 맨 앞에 IFS 값을 잠시 비워주시면 됩니다.
---
http://coolengineer.com
IFS= DATA=`grep -ir find_data
IFS= DATA=`grep -ir find_data file_name.txt`
Word Splitting이 일어나지 않게 위와 같이 맨 앞에 IFS 값을 잠시 비워주시면 됩니다.
---
http://coolengineer.com
음 ..
$ echo "$DATA"
http://www.tldp.org/LDP/abs/html/quoting.html
http://www.tldp.org/LDP/abs/html/varassignment.html
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
pynoos님 답변에 오류가 좀 있네요
IFS= DATA=`grep -ir find_data file_name.txt`
이렇게 하시면 위명령에 한에서 IFS= 이 적용되는게 아니라 이후 명령에도 IFS= 가 적용되요
그러니까 원래 있던 IFS 값이 없어져요
ymir 님 답변처럼 echo "$DATA" 와같이 " " 를 사용하는게 맞습니다.
IFS (Internal Field Seperator) 는 bash read 명령을 사용할때 field 별로 값을 구분해서
읽어 들이기 위해서 사용하는데 echo 명령을 사용할때도 적용이 됩니다
기본적으로 IFS 값은 3개로 되있고 다음과 같이 확인할수 있습니다.
echo -n "$IFS" | od -tax1
echo $data 와 같이 하시게 되면 IFS 문자를 로 치환해서 프린트 합니다.
그래서 결과값이 개행이 되지 않고 전부 space 로 이어져서 프린트 되는것이구요
이걸 방지하려면 echo "$data" 와같이 " " 를 사용해야 합니다.
아.. 그렇겠군요. 전체적으로 보면 환경변수 대입문만
아.. 그렇겠군요. 전체적으로 보면 환경변수 대입문만 있으니 이후에 영향을 미치겠네요.
---
http://coolengineer.com
댓글 달기