토큰화 및 파일 이름 확장이 "[[ ... ]]"의 조건식에서 작동하지 않는 이유는 무엇입니까?

토큰화 및 파일 이름 확장이 "[[ ... ]]"의 조건식에서 작동하지 않는 이유는 무엇입니까?

Bash 참조 매뉴얼에서

단어 분할 규칙:

큰따옴표 내에 발생하지 않는 매개변수 확장, 명령 대체 및 산술 확장에 대한 쉘 스캐닝 결과분사.

파일 이름 확장자 규칙:

단어 분리 후 Bash는 -f 옵션이 설정되지 않은 한 각 단어에서 '*', '?' 및 '[' 문자를 검색합니다(58페이지의 섹션 4.3.1 [내장 설정] 참조). 이러한 문자 중 하나가 발생하면 해당 단어는 패턴으로 간주되어 알파벳순 목록으로 대체됩니다.파일 이름패턴 일치

따라서 매개변수 확장, 명령 대체, 산술 확장 후에는 큰따옴표 안의 부분을 제외하고 단어 분리가 발생합니다.

  1. 존재하다 [[ ... ]],자일스그리고존 1024둘 다 단어 분리 및 파일 이름 확장이 적용되지 않음을 나타냅니다 [[ ... ]]. Bash 참조 매뉴얼 또는 POSIX 7 사양의 어떤 규칙이 이에 적용됩니까?

    • 조건식에는 큰따옴표가 없습니다 [[ ... ]]. 그렇다면 단어 분사를 사용하는 것은 어떨까요?

    • -f옵션은 설정되어 있지 않습니다. 파일 이름 확장자가 작동하지 않는 이유는 무엇입니까?

  2. 또한 [[ ... ]]단어 분할, 파일 이름 확장 또는 둘 다 적용되지 않는 다른 경우가 있습니까? 둘 중 하나 또는 둘 모두가 적용되지 않는다고 생각하는 동일한 이유가 있습니까 [[..]]?

  3. 단어 분할과 파일 이름 확장은 둘 다 모든 상황에 적용되거나 적용되지 않는다는 의미에서 항상 함께 진행됩니까?

답변1

내부에[[명령 문서, 당신은 볼 것이다

단어 분할 및 파일 이름 확장은 수행되지 않습니다.[[와 ]] 사이의 단어에 대해서는 물결표 확장, 매개변수 및 변수 확장, 산술 확장, 명령 대체, 프로세스 대체 및 인용 제거를 수행합니다.

(강조는 내 것)

게다가case성명면제가 있습니다

이것단어일치를 시도하기 전에 물결표 확장, 매개변수 확장, 명령 대체, 산술 확장 및 따옴표 제거를 거칩니다. 각무늬물결표 확장, 매개변수 확장, 명령 대체 및 산술 확장을 수행합니다.

특히 단어 분할과 파일 이름 확장이 누락되었습니다.

또한 변수 할당(참조쉘 매개변수)

다음 형식의 명령문을 사용하여 변수를 할당할 수 있습니다.

name=[value]

만약에지정하지 않으면 변수에 빈 문자열이 할당됩니다. 모두가치물결표 확장, 매개변수 및 변수 확장, 명령 대체, 산술 확장, 따옴표 제거 수행

그래서 이것은 안전합니다:

a="hello world"
b=$a

단어 분할이 수행되지 않는 기타 장소:

내 팁: bash 매뉴얼에서 "undergo"라는 단어를 검색하세요.

답변2

[[in and라는 단어는 ]]bash가 정규 표현식을 제공하기 위해 사용하는 확장입니다:

"==" 및 "!="와 우선순위가 동일한 추가 이항 연산자 "=~"를 사용할 수도 있습니다. 사용되면 연산자 오른쪽에 있는 문자열은 확장 정규식으로 처리되고 그에 따라 일치됩니다(regex3과 같은).

정규식의 파일 이름 확장은 둘 다 서로 다른 목적으로 동일한 *메타 문자를 사용하므로 도움이 되지 않습니다 ?.

추가 자료:

관련 정보