Bash
설명서에는 Expansion is performed on the command line after it has been split into words.
. 그런데 다음 문장에는 7번의 확장을 했다고 나와 있는데, 이번이 word splitting
6번이다. 내가 이해하는 한, 이 둘은 서로 다른 분사입니다. 이 두 분사의 차이점은 무엇인가요?
답변1
오직하나분사, 그런 일이 일어났어요뒤쪽에중괄호 확장, 물결표 확장, 매개변수 및 변수 확장, 명령 대체, 산술 확장 등이 있지만앞으로경로명 확장.
(힌트:단어분할은 단어를 더 많은 단어로 분할합니다. 처음에 명령줄을 토큰으로 분할하는 것과 단어 분할을 혼동하고 있습니다. )
|
먼저 명령줄은 메타 문자 ,&
,;
,(
,)
,<
, <space> 및 <tab>으로>
구분된 단어(또는 "태그") 로 구분됩니다.명령줄을 나타내는 단어는 목록, 파이프 및 간단한 명령으로 구문 분석됩니다.
확장은 각각의 간단한 명령이 실행되는 것으로 간주될 때 발생합니다.
중괄호 확장, 물결표 확장, 매개변수 및 변수 확장, 명령 대체 및 산술 확장 후에 쉘은 따옴표가 없는 확장 결과를 반복하여 단어로 분할합니다. 이번에는
$IFS
() 안의 문자로 구분합니다.아니요명령줄을 구분하는 데 사용되는 메타문자).마지막으로 쉘은 따옴표가 없는 확장 결과 목록을 다시 반복하고 경로 이름 확장을 수행합니다.
POSIX 사양의 모든 세부 사항을 읽어보세요.쉘 명령 언어. (POSIX는 약간 더 간단한 셸을 설명합니다. Bash는 몇 가지 확장 기능을 구현하지만 그것이 어떻게 맞는지 쉽게 확인할 수 있습니다.)
질문에 대답하려면 다음과 같이 명령줄을 쉘 메타 문자로 구분된 토큰으로 초기 분할합니다. 단어 분할은 확장 결과를 $IFS
.