나는 세미콜론이 프로그램을 구분하는 데 사용된다는 것을 읽었습니다.
$ echo 3; ls -la
if
이것은 , then
및 else
가 여기에 별도의 프로그램이라는 뜻인가요 ?
$ 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 호환 모드)이 준수해야 하는 구문을 설명합니다.
추가 읽기
답변3
if
실제로 외부 프로그램으로 생각하는 것이 then
그리 터무니없는 것은 아닙니다. 실제로 Thompson 쉘은 원래 else
Unix 버전 1에서 외부 프로그램 if
으로 구현되었습니다. goto
이는 하위 프로세스가 쉘 프로세스와 파일 설명자를 공유하기 때문에 가능합니다. 따라서 (전달된) goto는 대상 레이블을 찾은 다음 종료될 때까지 입력을 읽습니다. 바라보다톰슨 쉘.
답변4
if
, elif
및 then
는 fi
모두 복합 명령이라는 셸의 구성 중 하나를 구현하는 데 사용되는 예약된 키워드입니다. 이는 이러한 이름을 가진 명령(또는 다른 명령)이 셸에 존재할 수 없음을 의미합니다. 일반적으로 의 목적은 ;
명령을 분리하는 것이 아니라 명령을 종료하는 것입니다.목록. 예를 들어, 다음은 유효한 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
복합 명령의 끝을 표시합니다.