추가 읽기

추가 읽기

나는 세미콜론이 프로그램을 구분하는 데 사용된다는 것을 읽었습니다.

$ echo 3; ls -la

if이것은 , thenelse가 여기에 별도의 프로그램이라는 뜻인가요 ?

$ if [ $VARIABLE == abcdef ] ; then echo yes ; else echo no ; fi

이 질문은 세미콜론과 관련이 없습니다.

답변1

별도의 ;진술(느슨하게 말하면). ;a를 개행 문자로 바꾸는 것은 (거의) 항상 가능합니다 .

;따라서 두 프로그램을 분리하고 "프로그램" if이어야 한다고 말하는 것은 then명령문이 예약어, 쉘 함수, 내장 및 외부 유틸리티, 파이프 및 부울 연산자 사용 등의 조합으로 구성될 수 있기 때문에 약간 지나치게 단순화되었습니다. 등.

둘 다 예약어 if입니다then쉘 구문, "프로그램"이 아닌. 여기서 그들은 기술적으로 호출되는 것을 구축하는 데 사용됩니다.복합 명령.

echo이는 셸에 내장된 유틸리티일 수도 있지만(반드시 그런 것은 아님) ls외부 유틸리티(또는 말하는 "프로그램")일 수도 있습니다.

답변2

이것이 쉘 사용의 기본을 배우기 시작할 때의 공정한 첫 번째 근사치인 반면, "이것이 프로그램을 실행하는 방법입니다"와 "이것이 한 줄에서 하나씩 실행하는 방법입니다" 사이에는 큰 차이가 있습니다. 프로그램' 수준에서는 실제로는 그렇지 않습니다.

초보자가 마스터하기는 더 어렵지만 더 정확한 설명은 쉘 언어가 다음과 같다는 것입니다.컴퓨터 언어. 그것은 가지고있다통사론. 이 문법에는 다양한 내용이 포함됩니다.어휘 요소개행 문자, 연산자, 단어 및 예약어 등을 포함합니다.

if, then, else, fi모두예약어. 특별한 의미가 있을 때분석하다에 따라 쉘에 입력이 제공됩니다.문법. 마찬가지로 ;구분 기호입니다 .운영자.

따라서 쉘 언어의 입력은 전체적으로 컴퓨터 프로그램이며,설명했다다른 프로그램을 통해통역사, 껍질. 다양한 문법 부분은 프로그램이 아닙니다. 쉘 언어는 쉘이 실행하는 (다른) 프로그램을 지정하는 방법입니다.

[쉘 구문의 특수 어휘 요소(예: 연산자)가 아닙니다. 이건 평범한 거야단어, 그러한 프로그램 중 하나를 지정합니다 [. 많은 껍질에는내장이 프로그램 버전은 쉘 프로그램 자체의 코드에 통합되어 있지만외부프로그램 /bin/[과 같은 어딘가에 있는 프로그램에 이 이름을 사용하십시오./usr/bin/[밖의쉘을 호출할 수 있습니다. 마찬가지로 ]특별한 쉘 어휘 요소도 아닙니다. 이는 [프로그램의 매개변수 가 되는 일반적인 단어입니다 . 프로그램 [은 실행될 때 최종 인수가 필요하며 ]계속해서 이를 무시합니다.

귀하의 질문에 언급된 또 다른 유사한 프로그램은 입니다 echo. 다시 말하지만, 대부분의 쉘에는 이 프로그램의 내장 버전이 있습니다. 그러나 다시 말하지만, 프로그램에 대한 /bin/echo또는 와 같은 프로그램의 외부 버전이 있습니다 ./usr/bin/echo밖의호출할 셸입니다.

귀하의 질문에 지정된 세 번째 프로그램은 입니다 . Shell에는 일반적 으로 ls이 프로그램의 내장 버전이 없으며 ./bin/ls/usr/bin/ls

Bourne Again 쉘의 경우 다음에서 이 작업을 수행할 수 있습니다.쉘 기본 기능GNU Bourne Again 쉘 정보 문서. 물론 다른 쉘에는 다른 구문이 있습니다. 이것단일 유닉스 사양모든 POSIX 호환 셸(POSIX 호환 모드)이 준수해야 하는 구문을 설명합니다.

추가 읽기

  • "쉘 구문". 쉘 명령 언어. 기본사양 Issue 7. 그룹을 엽니다. IEEE 1003.1-2008. ISBN 1937218812.
  • test. 유용. 기본사양 Issue 7. 그룹을 엽니다. IEEE 1003.1-2008. ISBN 1937218812.
  • "쉘 구문". Z 쉘 매뉴얼. 버전 5.3.1. 2017.

답변3

if실제로 외부 프로그램으로 생각하는 것이 then그리 터무니없는 것은 아닙니다. 실제로 Thompson 쉘은 원래 elseUnix 버전 1에서 외부 프로그램 if으로 구현되었습니다. goto이는 하위 프로세스가 쉘 프로세스와 파일 설명자를 공유하기 때문에 가능합니다. 따라서 (전달된) goto는 대상 레이블을 찾은 다음 종료될 때까지 입력을 읽습니다. 바라보다톰슨 쉘.

답변4

if, elifthenfi모두 복합 명령이라는 셸의 구성 중 하나를 구현하는 데 사용되는 예약된 키워드입니다. 이는 이러한 이름을 가진 명령(또는 다른 명령)이 셸에 존재할 수 없음을 의미합니다. 일반적으로 의 목적은 ;명령을 분리하는 것이 아니라 명령을 종료하는 것입니다.목록. 예를 들어, 다음은 유효한 if설명입니다.

if echo foo; echo bar; echo baz; then echo done; echo really done; fi

명령문의 조건 if은 명령 목록입니다 echo foo; echo bar; echo baz. 파서는 then세미콜론 뒤에 오는 내용이 예약어이므로 명령이 될 수 없기 때문에 조건이 종료되었음을 알고 있습니다. 그러므로 그것은 무엇을 알고 있는가?다음과 같이 then몸의 시작입니다. 다시 말하지만, fi예약된 키워드이므로 명령문 본문의 세 번째 명령이 될 수 없지만 if복합 명령의 끝을 표시합니다.

관련 정보