수동 질문

수동 질문

안녕하세요 :) goto 명령을 이해하려고 노력 중입니다. goto 매뉴얼에 관해 몇 가지 질문이 있습니다. 여기에서 원본 매뉴얼을 찾을 수 있습니다:http://man.cat-v.org/unix-6th/1/goto

1. t̲h̲e̲ S̲h̲e̲l̲l̲ i̲s̲ t̲a̲k̲i̲n̲g̲ c̲o̲m̲m̲a̲n̲d̲s̲ f̲r̲o̲m̲ a̲ f̲i̲l̲e̲ 인 경우에만 이동이 허용됩니다.

밑줄 친 부분은 무엇을 의미하는가? 쉘에 goto를 입력할 수 없나요? 하지만 goto를 파일에 쓰면 모든 것이 작동할까요?

2. 파일의 처음부터 ":"로 시작하고 하나 이상의 공백과 레이블로 시작하는 줄을 검색합니다.

내 파일의 일부가 다음과 같다면

...
goto end
...

그런 다음 그는 이와 같은 부분을 찾았 : end지만 나는 일부 스크립트를 보았고 그것이 Unix v6에서 온 것 같아요. 매번 이렇게 보이는데 end:이제 올바른 순서는 무엇입니까?

삼. 해당 행이 발견되면 goto 명령이 반환됩니다. 명령 파일의 읽기 포인터는 레이블 다음 행을 가리키므로 그 결과 쉘이 레이블 행으로 분기됩니다.

":"가 있는 줄에 다른 명령을 작성하는 것이 합법적입니까? 예를 들어 :end echo "Hello"또는end: echo "Hello"

도와주셔서 감사합니다. 즐거운 크리스마스 되세요 :)

답변1

다음은 Unix 및 V6 쉘의 주요 기능입니다 goto.

  • 프로세스가 포크되면 열려 있는 모든 파일 설명자는 상위 프로세스와 하위 프로세스 간에 공유됩니다.
  • 이는 모든 프로세스에 의한 파일 읽기/쓰기 오프셋 재배치가 동일한 공유 파일 설명자를 가진 모든 프로세스에 반영된다는 것을 의미합니다.
  • V6 셸은 버퍼링 없이 표준 입력에서 한 번에 한 문자씩 읽습니다.
  • V6 셸이 스크립트를 실행할 때 seekstdin에서 데이터를 읽거나 시스템 호출을 사용하여 stdin의 읽기/쓰기 오프셋을 이동하는 V6 셸에서 생성된 모든 프로세스는 셸에서 데이터를 읽고 셸의 읽기/쓰기 오프셋 스크립트를 이동합니다.
  • 셸의 :명령은 (거의) 아무것도 수행하지 않는 명령이므로 그 용도 중 하나는 goto대상으로 사용됩니다. 인수에 대해 구문 오류(그리고 최신 쉘에서는 부작용을 일으킬 수 있는 쉘 변수 확장)를 확인하는 것 외에는 어떤 작업도 수행되지 않습니다.
    : > file파일을 자르는 방법입니다.
    : end echo "hello"아무것도 출력되지 않습니다. 이러한 다른 예
    :end echo "hello"및 는 존재하지 않을 수 있는 end: echo "hello"명령을 실행하려고 시도합니다 .:endend:
  • goto명령은 stdin의 읽기/쓰기 오프셋을 0(셸 스크립트의 시작 부분)으로 설정하고 stdin을 읽어서 로 시작하는 줄 :, 하나 이상의 공백, 전달된 인수 goto및 공백 또는 개행 문자를 찾습니다. 일치하는 항목을 찾으면 해당 줄 뒤에 읽기/쓰기 오프셋을 남기고 종료됩니다. 여기서 셸은 스크립트 실행을 다시 시작합니다.

여기에서 소스를 볼 수 있습니다 goto:http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6/usr/source/s1/goto.c

물어

쉘에 goto를 입력할 수 없나요?

당신은 할 수 있습니다. 이 goto명령은 stdin이 터미널에서 오는지 확인하고, 그렇다면 오류 메시지를 작성하고 종료합니다.

관련 정보