Profile picture

[Shell Script] <, <<, <<< 리다이렉션 활용

JaehyoJJAng2023년 04월 23일


< : 입력 리다이렉션

  • 파일을 읽어서 명령어에게 입력으로 제공
  • 예를 들어, command < input_file.txt는 'input_file.txt' 파일의 내용을 'command' 명령어에게 입력으로 전달함.
# input_file.txt 파일의 내용을 cat 명령어로 출력
$ cat < input_file.txt
input_file.txt의 파일 내용입니다.

관련 예제

input_file.txt 파일의 내용을 sort 명령어로 정렬하여 출력

sort < input_file.txt

file_content 변수에 input_file.txt 파일의 내용을 할당

file_content=$(<input_file.txt)
echo ${file_content}

<< : Here Document

  • 셸 스크립트에서 여러 줄의 입력을 제공하는 방법 중 하나.
  • << 다음에 오는 특정 문자열(여기서는 'EOF', 'END' 등을 사용)이 등장하기 전까지의 모든 줄을 입력으로 취급함.
  • 예를 들어, command << EOF는 'EOF'라는 문자열이 나올 때까지의 모든 입력을 'command' 명령어에게 제공.
$ vi here-document.sh

#!/bin/bash

# Here Document를 사용하여 여러 줄의 텍스트를 출력합니다.
while read line 
do
  echo "${line}"
done << EOF
This is line 1
This is line 2
This is line 3
EOF

관련 예제

Here Document를 사용하여 텍스트를 파일에 쓰기

$ cat > output_file.txt << EOF
This is line 1 in the file.
This is line 2 in the file.
EOF

<<< : Here String

  • 셸 스크립트에서 문자열을 표준 입력으로 전달하는 방법 중 하나.
  • 문자열을 명령어에게 바로 입력으로 전달함.
  • 예를 들어, command <<< "some string"는 "some string"이라는 문자열을 'command' 명령어에게 입력으로 전달함.
$ vi here-string.sh

#!/bin/bash

# Here String을 사용하여 문자열을 grep 명령어로 전달하여 검색
grep "search_word" <<< "This is the line containing the search_word"

관련 예제

변수의 값을 wc 명령어로 세어보기

#!/bin/bash

text="Hello, World!"
wc -c <<< "${text}"

현재 작업 디렉토리의 절대 경로를 가져와서 슬래시(/)를 구분자로 사용하여 이를 배열에 나누어 저장하기.

#!/bin/bash
BASEDIR=$(pwd)
IFS="/" read -ra BASEDIR_SPLIT <<< "$BASEDIR"
  • read -r: 이스케이프 문자를 그대로 처리
  • read -a BASEDIR_SPLIT: BASEDIR_SPLIT이라는 배열에 값을 할당
  • <<< "${BASEDIR}": "$BASEDIR" 문자열을 read 명령어의 표준 입력으로 제공

위와 비슷한 다른 예시
위 코드는 문자열 "apple banana orange"를 공백을 기준으로 분할하여 'fruits' 배열에 저장함. 이후 for 루프를 통해 fruits 배열의 요소를 출력

#!/bin/bash

string="apple banana oragne"
IFS=" " read -ra fruits <<< "${string}"

# fruits 배열 출력
for fruit in "${fruits[@]}"
do
  echo "${fruit}"
done

Loading script...