> 환경 및 유틸리티 > read

read: 사용자 입력 읽기

read 명령어는 표준 입력(stdin) 또는 지정된 파일 디스크립터로부터 한 줄을 읽어 하나 이상의 변수에 저장합니다. 셸 스크립트에서 사용자 입력을 받거나 파일 내용을 처리할 때 주로 사용됩니다. 이 명령어는 Bash, Zsh 등 대부분의 셸에 내장되어 있습니다.

개요

read는 스크립트가 사용자로부터 정보를 얻거나, 파이프 또는 파일에서 데이터를 읽어 변수에 할당할 때 핵심적인 역할을 합니다. 다양한 옵션을 통해 입력 방식과 처리 방법을 세밀하게 제어할 수 있습니다.

주요 기능

  • 사용자로부터 한 줄 입력 받기
  • 입력된 내용을 변수에 저장
  • 프롬프트 메시지 출력
  • 입력 시간 제한 설정
  • 비밀번호 등 민감한 입력 숨김 처리

주요 옵션

read 명령어의 주요 옵션들은 사용자 입력 처리 방식을 다양하게 제어할 수 있도록 돕습니다.

입력 제어

생성된 명령어:

명령어를 조합해 보세요.

설명:

`read` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

read 명령어의 다양한 활용 예시를 통해 사용자 입력 처리 방법을 익힐 수 있습니다.

기본 입력 받기

read name
echo "안녕하세요, $name님!"

사용자로부터 이름을 입력받아 변수에 저장합니다.

프롬프트와 함께 입력 받기

read -p "좋아하는 색깔은 무엇인가요? " color
echo "당신은 $color을(를) 좋아하시는군요."

사용자에게 질문을 제시하고 답변을 입력받습니다.

시간 제한 설정

echo "5초 안에 이름을 입력하세요:"
read -t 5 name
name=${name:-"손님"}
echo "안녕하세요, $name님!"

5초 내에 입력이 없으면 기본값으로 진행합니다.

비밀번호 입력 숨김

read -s -p "비밀번호를 입력하세요: " password
echo "\n비밀번호가 입력되었습니다."

입력되는 문자가 화면에 표시되지 않도록 합니다.

여러 변수에 입력 나누어 저장

read -p "이름과 나이를 입력하세요 (예: 홍길동 30): " name age
echo "이름: $name, 나이: $age"

공백으로 구분된 입력을 여러 변수에 순서대로 저장합니다.

파일에서 한 줄씩 읽기

echo -e "Line 1\nLine 2\nLine 3" > example.txt
while IFS= read -r line; do
  echo "읽은 줄: $line"
done < example.txt
rm example.txt

파일의 내용을 한 줄씩 읽어 처리하는 일반적인 패턴입니다.

팁 & 주의사항

read 명령어를 더욱 효과적이고 안전하게 사용하기 위한 팁과 주의사항입니다.

read -r 사용의 중요성

read -r 옵션은 백슬래시( \ )를 이스케이프 문자로 해석하지 않고 일반 문자로 처리하게 하여, 입력된 문자열이 그대로 변수에 저장되도록 합니다. 특히 파일 경로 등 특수 문자가 포함될 수 있는 입력을 받을 때 데이터 손실이나 오작동을 방지하기 위해 항상 사용하는 것이 좋습니다.

  • 예시 (백슬래시 처리): echo 'C:\Users\User' | read path; echo $path -> C:UsersUser (백슬래시 제거) echo 'C:\Users\User' | read -r path; echo $path -> C:\Users\User (백슬래시 유지)

IFS 변수 활용

IFS(Internal Field Separator) 변수는 read 명령어가 입력을 단어로 분리할 때 사용하는 구분자를 정의합니다. 기본값은 공백, 탭, 개행 문자입니다. IFS를 변경하여 쉼표(,)나 콜론(:) 등으로 구분된 데이터를 쉽게 파싱할 수 있습니다.

  • 예시 (쉼표 구분): echo "apple,banana,cherry" | IFS=, read -r fruit1 fruit2 fruit3 echo "첫 번째 과일: $fruit1, 두 번째 과일: $fruit2"

보안 주의: eval과 함께 사용 금지

사용자로부터 입력받은 값을 eval 명령어와 직접적으로 함께 사용하는 것은 보안상 매우 위험합니다. 악의적인 사용자가 임의의 코드를 실행할 수 있는 취약점이 될 수 있습니다. 사용자 입력은 항상 신뢰할 수 없는 데이터로 간주하고, 필요한 경우 엄격하게 검증해야 합니다.

  • 나쁜 예시: read -p "명령어를 입력하세요: " cmd eval "$cmd" # 절대 이렇게 사용하지 마세요!

파일 처리 시 while read 패턴

파일의 내용을 한 줄씩 읽어 처리할 때 `while IFS= read -r line` 패턴은 매우 강력하고 효율적입니다. `IFS=`는 선행/후행 공백 제거를 방지하고, `-r`은 백슬래시 처리를 방지하여 파일 내용을 정확히 읽을 수 있도록 합니다.

  • 일반적인 사용법: while IFS= read -r line; do # $line 변수에 파일의 각 줄이 저장됩니다. echo "처리 중: $line" done < your_file.txt

동일 카테고리 명령어