Bash
여기 문서와 여기 문자열
수색…
여기에 들여 쓰기 문서
당신은 탭 문서, 당신은 사용할 필요가 여기에 내부의 텍스트를 들여 쓰기 수 있습니다 <<-
대신 리디렉션 연산자를 <<
:
$ cat <<- EOF
This is some content indented with tabs `\t`.
You cannot indent with spaces you __have__ to use tabs.
Bash will remove empty space before these lines.
__Note__: Be sure to replace spaces with tabs when copying this example.
EOF
This is some content indented with tabs _\t_.
You cannot indent with spaces you __have__ to use tabs.
Bash will remove empty space before these lines.
__Note__: Be sure to replace spaces with tabs when copying this example.
이것 ( man bash
에서 언급했듯이)의 실제 사용 사례는 쉘 스크립트에 있습니다. 예를 들면 다음과 같습니다.
if cond; then
cat <<- EOF
hello
there
EOF
fi
가독성을 높이기 위해이 if
문과 같이 코드 블록 내의 행을 들여 쓰는 것이 일반적입니다. <<-
연산자 구문이 없으면 위의 코드를 다음과 같이 작성해야합니다.
if cond; then
cat << EOF
hello
there
EOF
fi
그것은 읽기가 매우 불편하며,보다 복잡한 현실적인 스크립트에서 훨씬 더 나 빠지게됩니다.
여기에 문자열
다음과 같이 문자열을 사용하여 명령을 제공 할 수 있습니다.
$ awk '{print $2}' <<< "hello world - how are you?"
world
$ awk '{print $1}' <<< "hello how are you
> she is fine"
hello
she
while
문자열에 here 문자열을 입력 할 수도 있습니다.
$ while IFS=" " read -r word1 word2 rest
> do
> echo "$word1"
> done <<< "hello how are you - i am fine"
hello
문자열 제한
heredoc 은 limitstring 을 사용하여 입력 소비를 중지 할시기를 결정합니다. 종료 제한 문자열 은
- 줄의 시작 부분에 있어야합니다.
- 줄의 유일한 텍스트 Note :
<<-
를 사용한다면<<-
limitstring 앞에 탭을 붙일 수 있습니다\t
옳은:
cat <<limitstring
line 1
line 2
limitstring
그러면 다음과 같이 출력됩니다.
line 1 line 2
잘못된 사용 :
cat <<limitstring
line 1
line 2
limitstring
마지막 줄의 limitstring
은 정확히 줄의 시작 부분이 아니기 때문에 쉘은 limitstring
시작하고 다른 내용을 포함하지 않는 줄을 볼 때까지 추가 입력을 기다립니다. 그런 다음에는 입력 대기를 중지하고 here-document를 cat
명령으로 전달합니다.
초기 제한 문자열에 하이픈을 접두사로 붙이면 구문 분석 전에 행 시작 부분의 탭이 제거되므로 데이터와 제한 문자열을 탭으로 들여 쓸 수 있습니다 (셸 스크립트에서 읽기 쉽도록).
cat <<-limitstring
line 1 has a tab each before the words line and has
line 2 has two leading tabs
limitstring
생산할 것이다
line 1 has a tab each before the words line and has line 2 has two leading tabs
선행 탭 (내부 탭 제외)이 제거되었습니다.
파일 만들기
이 문서의 고전적인 사용은 내용을 입력하여 파일을 만드는 것입니다.
cat > fruits.txt << EOF
apple
orange
lemon
EOF
here-document는 << EOF
와 EOF
사이의 줄입니다.
이 문서는 cat
명령의 입력이됩니다. cat
명령은 단순히 입력을 출력하고 출력 경로 재 지정 연산자 >
사용하여 fruits.txt
파일로 리디렉션합니다.
결과적으로 fruits.txt
파일에는 다음 행이 포함됩니다.
apple
orange
lemon
출력 경로 재 지정의 일반적인 규칙이 적용됩니다. fruits.txt
가 전에 존재하지 않았 으면 생성됩니다. 이전에 존재하면 잘립니다.
이 문서와 함께 명령을 실행하십시오.
ssh -p 21 [email protected] <<EOF
echo 'printing pwd'
echo "\$(pwd)"
ls -a
find '*.txt'
EOF
$
는 현재 쉘에 의해 확장되기를 원하지 않기 때문에 이스케이프 처리됩니다. 즉 $(pwd)
는 원격 쉘에서 실행됩니다.
또 다른 방법:
ssh -p 21 [email protected] <<'EOF'
echo 'printing pwd'
echo "$(pwd)"
ls -a
find '*.txt'
EOF
참고 : 닫는 EOF 는 줄의 시작 부분에 있어야합니다 (앞에 공백 없음). 들여 쓰기가 필요한 경우, <<-
사용하여 heredoc을 시작하면 탭이 사용될 수 있습니다. 자세한 내용은 여기 에 들여 쓰기 문서 및 문자열 제한 예제를 참조하십시오.
sudo를 사용하여 여러 명령 실행
sudo -s <<EOF
a='var'
echo 'Running serveral commands with sudo'
mktemp -d
echo "\$a"
EOF
-
$a
가 현재 쉘에서 확장되지 않도록 이스케이프 처리해야합니다.
또는
sudo -s <<'EOF'
a='var'
echo 'Running serveral commands with sudo'
mktemp -d
echo "$a"
EOF