쉘은 실행을 위해 명령줄의 내용을 어떻게 처리합니까?
- 먼저 명령이 있고 그 다음에는 옵션과 매개변수가 있습니다.
- 명령줄을 세그먼트로 분할합니다.
- 처음부터 끝까지의 과정입니다.
답변1
bash
"쉘"은 ksh
, , 및 모두에 대한 일반적인 단어 입니다 zsh
.
man bash
이러한 모든 셸에는 실행 전에 명령이 확장되는 방법(변수가 $foo
해당 내용으로 대체되고 fu*
대체 fun funny
(이러한 파일 종료 제공) 등) 방법을 자세히 설명하는 매뉴얼 페이지(예: )가 있습니다 .
다음을 사용하여 간단한 명령을 디버깅할 수 있습니다.
echo my-command ${foo} fu*
|
보다 복잡한 명령(예: 파이프( ) 사용)은 명령 앞에 set -x를 설정하여 디버깅할 수 있습니다.
set -x
my-command ${foo} fu* | while read x
do
done
set +x
그러나 이것은 다음과 같습니다.XY 문제.
답변2
명령줄의 첫 번째 필드는 특수 변수에 의해 참조되는 실행할 명령입니다 $0
. 그 이후에 일어나는 일은 단순히 $1
, $2
, ... 라고 하는 실행 파일에 대한 인수 $n
이며 $0
이를 처리하는 것은 셸이 아닌 셸의 책임입니다.
답변3
명령줄을 구문 분석하는 프로세스(라고 함)는 아래에 표시된 것처럼 이해하기 위해 책의 하위 장을 필요로 하는 다소 길고 복잡한 프로세스입니다.ksh는 여기에 설명되어 있습니다.(예를 들어).
일반적으로 매우 간단한 용어로(필요한 많은 세부 사항을 정의할 수 없음) 각 토큰(주로 공백으로 묶인 단어)은 매개 변수로 인식된 후 왼쪽에서 오른쪽으로 순서대로 처리됩니다. 확장된 인수로 제공됩니다(리디렉션은 특별합니다).
더 나은 설명을 위해 이 책을 읽으십시오. 위의 내용을 이해하는 것은 매우 간단합니다.