Bash 참조 매뉴얼에서
단어 분할 규칙:
큰따옴표 내에 발생하지 않는 매개변수 확장, 명령 대체 및 산술 확장에 대한 쉘 스캐닝 결과분사.
파일 이름 확장자 규칙:
단어 분리 후 Bash는 -f 옵션이 설정되지 않은 한 각 단어에서 '*', '?' 및 '[' 문자를 검색합니다(58페이지의 섹션 4.3.1 [내장 설정] 참조). 이러한 문자 중 하나가 발생하면 해당 단어는 패턴으로 간주되어 알파벳순 목록으로 대체됩니다.파일 이름패턴 일치
따라서 매개변수 확장, 명령 대체, 산술 확장 후에는 큰따옴표 안의 부분을 제외하고 단어 분리가 발생합니다.
존재하다
[[ ... ]]
,자일스그리고존 1024둘 다 단어 분리 및 파일 이름 확장이 적용되지 않음을 나타냅니다[[ ... ]]
. Bash 참조 매뉴얼 또는 POSIX 7 사양의 어떤 규칙이 이에 적용됩니까?조건식에는 큰따옴표가 없습니다
[[ ... ]]
. 그렇다면 단어 분사를 사용하는 것은 어떨까요?이
-f
옵션은 설정되어 있지 않습니다. 파일 이름 확장자가 작동하지 않는 이유는 무엇입니까?
또한
[[ ... ]]
단어 분할, 파일 이름 확장 또는 둘 다 적용되지 않는 다른 경우가 있습니까? 둘 중 하나 또는 둘 모두가 적용되지 않는다고 생각하는 동일한 이유가 있습니까[[..]]
?단어 분할과 파일 이름 확장은 둘 다 모든 상황에 적용되거나 적용되지 않는다는 의미에서 항상 함께 진행됩니까?
답변1
내부에[[
명령 문서, 당신은 볼 것이다
단어 분할 및 파일 이름 확장은 수행되지 않습니다.[[와 ]] 사이의 단어에 대해서는 물결표 확장, 매개변수 및 변수 확장, 산술 확장, 명령 대체, 프로세스 대체 및 인용 제거를 수행합니다.
(강조는 내 것)
게다가case
성명면제가 있습니다
이것단어일치를 시도하기 전에 물결표 확장, 매개변수 확장, 명령 대체, 산술 확장 및 따옴표 제거를 거칩니다. 각무늬물결표 확장, 매개변수 확장, 명령 대체 및 산술 확장을 수행합니다.
특히 단어 분할과 파일 이름 확장이 누락되었습니다.
또한 변수 할당(참조쉘 매개변수)
다음 형식의 명령문을 사용하여 변수를 할당할 수 있습니다.
name=[value]
만약에값지정하지 않으면 변수에 빈 문자열이 할당됩니다. 모두가치물결표 확장, 매개변수 및 변수 확장, 명령 대체, 산술 확장, 따옴표 제거 수행
그래서 이것은 안전합니다:
a="hello world"
b=$a
단어 분할이 수행되지 않는 기타 장소:
내 팁: bash 매뉴얼에서 "undergo"라는 단어를 검색하세요.
답변2
[[
in and라는 단어는 ]]
bash가 정규 표현식을 제공하기 위해 사용하는 확장입니다:
"==" 및 "!="와 우선순위가 동일한 추가 이항 연산자 "=~"를 사용할 수도 있습니다. 사용되면 연산자 오른쪽에 있는 문자열은 확장 정규식으로 처리되고 그에 따라 일치됩니다(regex3과 같은).
정규식의 파일 이름 확장은 둘 다 서로 다른 목적으로 동일한 *
메타 문자를 사용하므로 도움이 되지 않습니다 ?
.
추가 자료:
- 3.2.4.2 조건부 구성(Bash 참조 매뉴얼)