< : 입력 리다이렉션
- 파일을 읽어서 명령어에게 입력으로 제공
- 예를 들어,
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