옵션 |
|
#!/bin/bash
read -p "Enter a username > " user_name
file_info=$(grep "^$user_name:" $FILE)
echo "$file_info"
if [ -n "$file_info" ]; then
IFS=':' read user pw uid gid name home shell <<< "$file_info"
echo "User = $user"
echo "UID = $uid"
echo "GID = $gid"
echo "Full Name = $name"
echo "Home Dir = $home"
echo "Shell = $shell"
else
echo "No such user $user_name" >&2
exit 1
fi
쉘프로그래밍 책을 보던 중에 의아한게 있어서 질문드립니다.
위의 코드에서 빨갛게 표시된 곳이 약간 의문인 부분인데요. 책에서는 명령어가 나오기전에 쉘에서 변수를 선언해주는 걸 허용하고 또 그 변수는 해당 명령어에서만 사용되는 환경이 된다고 하는데, 사실 이건 이해가 가는데요. IFS변수가 구분자를 나타내기때문에 passwd 파일로부터 읽어온 문자열을 :를 기준으로 나눠서 각각 다른 변수에 입력하는것도 이해가 갑니다만. 제가 궁금한건 왜 이러한 형태의 선언이 echo명령어를 포함해서는 제대로 적용되지 않는가입니다.
예를들어서 현재 접속중인 쉘에서 FOO라는 변수가 선언되어있지않다면,
FOO='foo' echo $FOO를 타이핑하면 foo가 출력되어야 할거같은데, 그냥 빈칸이 출력됩니다.
그래서 read에만 적용이 되는 건가 했더니 그것 또한 아닌것이, FOO='foo' printenv | grep FOO를 타이핑하면 원하는대로 출력이 나옵니다.
어째서 echo만 똑같은 구문이 제맘처럼 안나오는것인지 궁금합니다. 고수님들 도와주세요 ㅠㅠ