Shell: IFS / Array 사용. 한 줄에?

셸 스크립트에 보면, 환경변수와 명령을 한 줄로 넣을 때가 종종 있다.

IFS=":" read user pw uid gid name home shell <<< "$file_info"

두 줄로 나누는 것과 차이가 있나? 궁금했었는데, 내 인생에서 한 획을 그어준 리눅스 책, ‘The Linux command line’ 에 그 답이 있었다. (위 예도 그 책에서 가져왔다.)

The shell allows one or more variable assignments to take place immediately before a
command. These assignments alter the environment for the command that follows. The
effect of the assignment is temporary changing only the environment for the duration of
the command. In our case, the value of IFS is changed to a colon character. Alternately,
we could have coded it this way:

The Linux Command line, 5th Internet Edition, p441

중요한 문구는 ‘Temporary’ 이다. 저렇게 할당한 IFS 는 저 한 줄 내에서만 저 값을 유지하고, 그 다음 줄부터는 원래값으로 돌아간다.
만약, 이렇게 하지 않고 원래값으로 되돌리려면, 다소 지저분한 코딩을 해야 한다.

OLD_IFS="$IFS"
IFS=":"
read user pw uid gid name home shell <<< "$file_info"
IFS="$OLD_IFS"

한 줄로 쓰는덴 다 이유가 있었다.

그런데, 이건 env 명령과는 또 다른 듯 하다.
여기에 대해선 좀 더 공부가 필요..


아울러, 내가 본 책은 2012년에 출간(인쇄본)된 종이책이었는데, 이게 인터넷판이 따로 있었다. 물론, 무료.
저자는 오랜 기간 IT 업계에 종사하셨다가(책 내용에, 70년대 말에 대학을 다녔다는 얘기가 나온다.) 지금은 은퇴하신 분이라는데..
‘은퇴’라는 건 이렇게 해야 하는게 아닐런지.

인터넷판(5판)은 저자의 홈페이지에서 구할 수 있다.
그리고 종이책도 2판이 나왔다. 아마도 인터넷 5판에 기초하여 출간된 듯 하다. 아마존에서 직구하는게 국내에서 구매하는 것보다(포인트등에 따라 다르긴 하겠지만) 현재로선 4000원 정도 더 싸다. 아마 신간 출시 행사인지? 정가는 $39.95 인데, 현재 $25.31 에 팔리고 있다.
예상 배달 소요 시간은 국내 서점이 조금 덜 걸리는 듯 한데, 큰 차이는 없다.
1판과 비교해서 2판은 약 40쪽 정도 늘어났는데, 사고는 싶으나~ ㅎㅎ
그냥 인터넷판으로 만족해야겠다.

Tags:
One Comment

안녕하세요. 글 남겨주셔서 고맙습니다.