토큰화는 POSIX의 일부인가요?

토큰화는 POSIX의 일부인가요?

나는 Bash에 단어 분리 기능이 있다는 것을 알고 있지만 zsh에는 그렇지 않으며 다른 것(csh, tcsh, ksh 등)에 익숙하지 않지만 이것이 표준의 일부인지 알고 싶습니다.

즉, sh단어 분리 기능이 있는 걸까요, 아니면 Bash만의 기능인 걸까요? 이식 가능한 쉘 스크립트를 작성하려면 단어 분리를 고려해야 합니까, 아니면 다른 쉘에 의해 추가된 비표준적인 것입니까?

답변1

암시적 토큰화, 즉 인용되지 않은 변수 확장에 대한 토큰화( $foo토큰화와 반대 ) "$foo"는 모든 POSIX 호환 쉘(더 일반적으로는 모든 sh쉘)이 수행하는 작업입니다. 또한 결과를 와일드카드로 표시합니다. 그렇기 때문에변수 대체를 큰따옴표로 묶어야 합니다.. 명령 대체도 마찬가지입니다.

POSIX는 이를 호출합니다.필드 분할그리고경로명 확장.

Zsh는 표준 sh 동작에서 벗어납니다. 따옴표가 없는 변수 대체에 대해서는 단어 분할을 수행하지 않지만(그러나 따옴표가 없는 명령 대체에 대해서는 단어 분할을 수행함), 따옴표가 없는 대체에 대해서는 글로빙을 전혀 수행하지 않습니다. (물론 Zsh에는 이러한 기능이 있지만 $=foo토큰화 및 $~foo글로빙이라는 매우 구체적인 기능이 있습니다.) Zsh는 sh 호환 셸이 아니며 sh 호환 셸입니다. 합리적으로 유사하지만 호환되지 않으며 감소된 암시적 분할이 주요 편차 중 하나입니다.

Zsh 에는 sh처럼 암시적 토큰화 및 와일드카드 지정과 같은 작업을 수행하는 호환 모드( zsh 실행 파일을 호출하면 sh자동으로 입력됨 )가 있습니다.ksh

Bash와 ksh는 sh 호환 쉘입니다. Bash에는 POSIX와 일부 비호환성이 있지만 이를 찾으려면 좀 더 자세히 살펴봐야 합니다. 암시적 분할과 같은 중요한 문제에 대해 호환됩니다.

(T)csh는 완전히 다른 쉘 계열입니다. 구문은 sh와 상당히 다릅니다. 그것도 죽었으니 걱정하지 않아도 된다.

답변2

필드 분할POSIX 표준에서:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_05

매개변수 확장(Parameter Expansion), 명령 대체(Command Substitution), 산술 확장(Arithmetic Expansion) 후에 쉘은 필드 분할을 위해 큰따옴표로 묶이지 않은 확장 및 대체 결과를 스캔하여 여러 필드를 생성할 수 있습니다.

쉘은 IFS의 각 문자를 구분 기호로 처리하고 구분 기호를 필드 종결자로 사용하여 매개변수 확장, 명령 대체 및 산술 확장의 결과를 필드로 분할해야 합니다.

관련 정보