Bash - 선행 공백이 있는 변수의 매개변수 확장

Bash - 선행 공백이 있는 변수의 매개변수 확장

나는 항상 쉘의 매개변수 확장에 대한 이상한 규칙에 대해 궁금해했습니다.

내가 선언하면

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.twoand three

관련 정보