수색…


매개 변수

매개 변수 세부
IFS 내부 필드 분리 기호
파일 파일 이름 / 경로
-r 읽기와 함께 사용할 때 백 슬래시 해석을 방지합니다.
-t readarray 읽는 각 줄에서 후행 줄 바꾸기를 제거합니다.
-d DELIM 개행 문자 대신 DELIM의 첫 문자가 읽혀질 때까지 계속 read

파일 (/ etc / passwd)을 한 줄씩 필드별로 읽습니다.

#!/bin/bash
FILENAME="/etc/passwd"
while IFS=: read -r username password userid groupid comment homedir cmdshell
do
  echo "$username, $userid, $comment $homedir"
done < $FILENAME

유닉스 패스워드 파일에서, 사용자 정보는 줄 단위로 저장되며 각 줄은 콜론 (:) 문자로 구분 된 사용자에 대한 정보로 구성됩니다. 이 예제에서는 파일을 한 줄씩 읽는 동안 IFS에 지정된 값으로 구분 기호로 콜론 문자를 사용하여 필드를 구분합니다.

샘플 입력

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin

샘플 출력

mysql, 27, MySQL Server /var/lib/mysql
pulse, 497, PulseAudio System Daemon /var/run/pulse
sshd, 74, Privilege-separated SSH /var/empty/sshd
tomcat, 91, Apache Tomcat /usr/share/tomcat6
webalizer, 67, Webalizer /var/www/usage

한 줄씩 읽고 전체 줄을 변수에 할당하려면 다음을 수정하십시오. 여기에 언급 된 이름 행별로 하나의 변수 만 있습니다.

#!/bin/bash
FILENAME="/etc/passwd"
while IFS= read -r line
do
  echo "$line"
done < $FILENAME

샘플 입력

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin

샘플 출력

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:497:495:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tomcat:x:91:91:Apache Tomcat:/usr/share/tomcat6:/sbin/nologin
webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin

파일의 행을 배열로 읽어들입니다.

readarray -t arr <file

또는 루프 :

arr=()
while IFS= read -r line; do
   arr+=("$line")
done <file

줄 단위로 파일 반복

while IFS= read -r line; do
   echo "$line"
done <file

파일 끝에 끝에 개행 문자가 포함되어 있지 않으면 다음을 수행하십시오.

while IFS= read -r line || [ -n "$line" ]; do
   echo "$line"
done <file

문자열의 행을 배열로 읽어들입니다.

var='line 1
line 2
line3'
readarray -t arr <<< "$var"

또는 루프 :

arr=()
while IFS= read -r line; do
   arr+=("$line")
done <<< "$var"

문자열을 줄 단위로 반복

var='line 1
line 2
line3'
while IFS= read -r line; do
   echo "-$line-"
done <<< "$var"

또는

readarray -t arr <<< "$var"
for i in "${arr[@]}";do
    echo "-$i-"
done

줄 단위로 명령 줄 출력을 통한 루핑

while IFS= read -r line;do
    echo "**$line**"
done < <(ping google.com)

또는 파이프와 함께 :

ping google.com |
while IFS= read -r line;do
    echo "**$line**"
done

필드로 파일 필드 읽기

필드 구분자가 파일 파일 에서 : 콜론)이라고 가정 해 봅시다.

while IFS= read -d : -r field || [ -n "$field" ]; do
   echo "$field"
done <file

내용 :

first : se
con
d:
    Thi rd:
    Fourth

출력은 다음과 같습니다.

**first **
** se
con
d**
**
    Thi rd**
**
    Fourth
**

필드로 문자열 필드 읽기

필드 분리 기호가 : 같다고 가정 해 보겠습니다 :

var='line: 1
line: 2
line3'
while IFS= read -d : -r field || [ -n "$field" ]; do
   echo "-$field-"
done <<< "$var"

산출:

-line-
- 1
line-
- 2
line3
-

파일의 필드를 배열로 읽어들입니다.

필드 분리 기호가 : 같다고 가정 해 보겠습니다 :

arr=()
while IFS= read -d : -r field || [ -n "$field" ]; do
   arr+=("$field")
done <file

문자열 필드를 배열로 읽어들입니다.

필드 분리 기호가 : 같다고 가정 해 보겠습니다 :

var='1:2:3:4:
newline'
arr=()
while IFS= read -d : -r field || [ -n "$field" ]; do
   arr+=("$field")
done <<< "$var"
echo "${arr[4]}"

산출:

newline

필드에 의한 명령 필드 출력을 통한 루핑

필드 분리 기호가 : 같다고 가정 해 보겠습니다 :

while IFS= read -d : -r field || [ -n "$field" ];do
    echo "**$field**"
done < <(ping google.com)

또는 파이프로 :

ping google.com | while IFS= read -d : -r field || [ -n "$field" ];do
    echo "**$field**"
done


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow