나는 항상 쉘의 매개변수 확장에 대한 이상한 규칙에 대해 궁금해했습니다.
내가 선언하면
NUMBERS=" one two "
다음 명령을 실행하면 (변수 문자열과 상수 문자열 사이에 공백이 없어야 함을 주의하세요.)
echo ${NUMBERS}'and three'
Bash(및 Dash 및 Kornshell)는 다음과 같이 응답합니다.
one two and three
그러나 동일한 출력이 에코됩니다.
echo ${NUMBERS} 'and three'
내 인상에 따르면,2.6.5 필드 분할규칙 3a, 변수 확장 시 입력의 시작과 끝 부분에 있는 IFS 공백은 무시되어야 합니다 NUMBERS
.
쉘이 확장 문자열과 상수 문자열 사이에 공백을 넣을 때도 있고 그렇지 않을 때도 있는 이유는 무엇입니까?
답변1
필드 분할이 발생합니다.뒤쪽에확장하고 IFS
선행 및 후행 공백을 무시합니다.모두입력(첫 번째 "논리적" 필드 앞이나 마지막 필드 뒤에 필드가 생성되지 않도록 하기 위해) 따라서 필드 분할을 수행할 때 첫 번째 예는 다음과 같습니다.
echo one two 'and three'
이는 fields 로 구문 분석되며 one
마찬가지로 두 번째 예는 다음과 같습니다 two
.and three
echo one two 'and three'
또한 필드 및 로 구문 분석됩니다 one
.two
and three