adsense_in_article_test


[bash: echo] 탭(tab) 출력할 때 따옴표(")의 중요성 리눅스 bash script

shell script를 만들어 쓰다 보면 파일의 특정 행을 읽어서 이 행의 문자열들을 하나씩 가져다가 작업을 해야 하는 경우가 종종 생긴다.

예를 들어 people.txt에 이름과 이메일이 아래와 같은 형태로 저장되어 있다고 하자. 이름과 이메일 사이는 콜론(:)으로 구분한 경우이다.

john:john@mail.com
jane:jane@mail.com

이 파일에서 2번째 행, 즉 jane의 정보를 가지고 뭔가 작업을 하려고 한다면 script에 아래와 같은 내용이 들어갈 수 있다. (sed 명령에 대한 내용은 이전 게시물을 참고하자)

# people.txt에서 2번째 행을 뽑아서 data_str 변수에 저장
data_str=`sed -n 2p people.txt`
# 첫번째 필드를 name 변수에 저장
name=`echo $data_str | cut -d':' -f1`
# 두번째 필드를 email 변수에 저장
email=`echo $data_str | cut -d':' -f2`
# 이제 작업 시작
...

위의 예시는 별 문제가 없지만, 만약 구분자를 탭(tab)으로 사용한 파일을 다룰 때는 문제가 발생한다. 예를 들어 jane:jane@mail.com 대신 jane[탭]jane@mail.com 이런 형식으로 저장된 파일이라면 echo 명령으로 변수값을 출력할 때 잊지 말고 따옴표를 사용해 주자.

echo "$data_str" 이런 식으로 해야 한다. 따옴표를 사용하지 않으면 탭이 공백(space)으로 대체된다.

# data_str 변수에 jane[탭]jane@mail.com이 할당된 경우
echo $data_str
# 결과는 jane jane@mail.com (탭이 사라지고 공백으로 대체)
echo "$data_str"
# 결과는 jane[탭]jane@mail.com (탭이 보존됨)

따라서 탭을 구분자로 사용한 파일을 가지고 작업을 할 때는 앞의 예시가 아래와 같이 변경되어야겠다.
 
data_str=`sed -n 2p people.txt`
# data_str 변수로 받은 문자열의 구분자가 탭인 경우
# 첫번째 필드를 name 변수에, 두번째 필드를 email 변수에 저장
# cut 명령의 기본 구분자가 탭이므로 -d 옵션 불필요
name=`echo "$data_str" | cut -f1`
email=`echo "$data_str" | cut -f2`

성격이 꼼꼼하지 못해서 그런지 몇번이나 따옴표를 빼먹는 실수를... -_-;



핑백

  • 반달가면 : [bash: ",'] 따옴표 선택/사용하기 2015-04-14 23:00:07 #

    ... $a 위의 예시에서 변수 a를 지정할 때 따옴표를 사용하지 않아도 무방해 보이긴 하는데, 변수에 저장된 문자열이 탭(tab)을 포함하고 있을 경우 따옴표가 없으면 출력할 때 탭이 사라지게 되므로 웬만하면 큰 따옴표를 써 주는 것이 좋겠다. grep 명령에서도 비슷한 경우가 발생할 수 있다. # echo 명령은 문자열 '$a' 출력, ... more

덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.



통계 위젯 (화이트)

141516
2895
2275599

2019 대표이글루_IT

B-Side