아래 명령에서 마이너스(-)와 EOC가 무슨 뜻인지 알고 싶습니다. Perl과 같은 일부 언어에서는 문자 조합(EOF에 바인딩되지 않음)을 선택할 수 있다는 것을 알고 있지만 여기서도 그런가요? 그리고 마이너스는 나에게 완전한 미스터리입니다. 미리 감사드립니다!

ftp -v -n $SERVER  >> $LOG_FILE <<-EOC
            user $USERNAME $PWD
            binary
            cd $DIR1
            mkdir $dir_lock
            get $FILE
            bye
EOC

답변1

그것은 여기 문서 리디렉션입니다.

command <<-word
here-document contents
word

word여기 문서를 구분하는 데 사용되는 는 임의적입니다 . 대문자를 사용하는 것이 일반적이지만 반드시 필요한 것은 아닙니다.

in -<<-wordhere-document 내용의 각 줄 시작 부분에서 탭이 제거되는 효과를 갖습니다.

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
SERVICE_ANNOUNCEMENT

위의 여기 문서가 각 줄의 시작 부분에 리터럴 탭으로 작성된 경우 출력은 다음과 같습니다.

hello
world

오히려

    hello
    world

끝 구분 기호 앞의 탭도 다음을 사용하여 제거됩니다 <<-(그러나 없이는 제거되지 않음 -).

cat <<-SERVICE_ANNOUNCEMENT
    hello
    world
    SERVICE_ANNOUNCEMENT

(동일한 출력)

답변2

에서 man bash:

   If the redirection operator is <<-, then all leading tab characters are
   stripped  from  input  lines  and  the line containing delimiter.  This
   allows here-documents within shell scripts to be indented in a  natural
   fashion.

관련 정보