이름에 공백이 있는 파일을 나열하면 대부분 아포스트로피로 둘러싸인 것을 볼 수 있습니다.
'famille, vacances, loisirs'
Chapitre 2 : L'accès au système.md
아포스트로피가 포함된 이름이 이어야 하는 파일을 편집해야 합니다 .
나는 시도했다:
gvim 'Chapitre 2 : L''accès au système.md'
중간 아포스트로피가 두 배로 표시됩니다. 하지만 'Chapitre 2 : Laccès au système.md'
아포스트로피가 전혀 없는 파일을 생성합니다 .
나는 시도했다:
gvim "Chapitre 2 : L'accès au système.md"
다음과 같은 파일이 생성됩니다."Chapitre 2 : L'accès au système.md"
두 가지 질문이 있습니다.
(시스템의 경우) 파일 이름:
"Chapitre 2 : L'accès au système.md"
이 작업을 성공적으로 수행했을 때 이름이 지정된 것과 동일한 파일입니까?'Chapitre 2 : L'accès au système.md'
내 파일에 파일 이름을 어떻게 써야 하나요?김
'Chapitre 2 : L'accès au système.md'
출력에서 읽고 싶은 정확한 파일 이름을 가져오는 명령엘에스주문하다?
답변1
ls
출력을 명확하게 만들기 위해 쉘의 인용 규칙을 사용하여 파일 이름이 출력되는 일부 시스템에 있습니다 . 예를 들어 GNU ls는 QUOTING_STYLE
로 설정되거나 shell
이것이 ls
기본값인 coreutils >= 8.25에서 설정될 수 있습니다. 명령줄에 파일 이름을 입력할 때 쉘의 인용 규칙도 중요합니다.
gvim 'Chapitre 2 : L''accès au système.md'
'Chapitre 2 : Laccès au système.md'
대신 아포스트로피가 전혀 없는 파일이 생성됩니다 .
쉘에 두 개의 작은따옴표 문자열을 연속적으로 제공하면 연결됩니다. SQL에서는 이런 식으로 작은따옴표를 얻을 수 있지만 대부분의 일반적인 쉘에서는 (†) 할 수 없습니다 . 표시되는 바깥쪽 작은따옴표는 파일 이름의 일부가 되어서는 안 되며 ls
출력을 명확하게 하기 위해 표시되는 것일 뿐입니다 . 실제 파일 이름은 Chapitre 2 : Laccès au système.md
.
(† POSIX 스타일 쉘(예: 기본 설정의 Bash, ksh 및 zsh), (t)csh 및 Fish는 이를 연결로 취급하며 이는 Python 등에서도 작동하는 방식입니다. 다른 쉘(rc/ es/ akanga )는 SQL이 수행하는 작업을 수행하지만 zsh는 선택적으로 수행할 수 있습니다 rcquotes
.
gvim "Chapitre 2 : L'accès au système.md"
다음이라는 파일을 만들었습니다."Chapitre 2 : L'accès au système.md"
이름을 생성할 가능성이 높습니다 . 큰따옴표는 이름의 일부가 아니며 출력을 명확하게 하기 위해 Chapitre 2 : L'accès au système.md
인쇄됩니다 . ls
여기서는 이름에 작은따옴표가 있기 때문에 작은따옴표 대신 큰따옴표를 사용하는데, 큰따옴표에는 특별한 것이 없으므로 이 형식이 가장 깔끔합니다. 하지만
- (시스템의 경우) 파일 이름:
"Chapitre 2 : L'accès au système.md"
이 작업을 성공적으로 수행했을 때 이름이 지정된 것과 동일한 파일입니까?'Chapitre 2 : L'accès au système.md'
이것이 전체 파일 이름이고 파일 이름으로 유효한 경우! -- 그렇다면 아니요, 다른 하나는 두 개의 큰따옴표와 하나의 작은따옴표를 포함하고 다른 하나는 세 개의 작은따옴표를 포함하기 때문에 동일하지 않습니다.
쉘의 인용 규칙을 사용하여 해석할 때 동일한지 여부를 의미한다면 다시는 아니오입니다. "Chapitre 2 : L'accès au système.md"
문자열을 Chapitre 2 : L'accès au système.md
단일 쉘 단어로 나타냅니다(따옴표로 묶어두기 때문).
반면에 는 'Chapitre 2 : L'accès au système.md'
문자열 Chapitre 2 : Laccès
, au
, système.md
(따옴표가 없는 공백이 있기 때문에 세 가지 다른 쉘 단어)와 닫는 파트너가 없는 열린 따옴표를 나타냅니다. 쉘 명령줄에 이것을 입력하면 닫는 따옴표를 얻기 위해 다른 입력 줄을 기다립니다. 끝에 흩어진 따옴표 없이 이를 셸 명령줄에서 명령에 대한 인수로 입력하면 명령이 이러한 세 가지 다른 파일에 액세스하려고 시도할 수 있습니다.
'Chapitre 2 : L'accès au système.md'
ls 명령의 출력에서 읽고 싶은 정확한 파일 이름을 얻으려면 gvim 명령에 파일 이름을 어떻게 써야 합니까 ?
쉘 스타일 인용 문자열을 출력하는 모드에서는 ls
출력 할 수 없습니다 'Chapitre 2 : L'accès au système.md'
. 이는 유효한 쉘 스타일 인용 문자열이 아니기 때문입니다. 끝에 닫히지 않은 인용 부호가 있습니다.
이제 처음에 말씀하신 내용으로 돌아가면 다음과 같습니다.
Chapitre 2 : L'accès au système.md
아포스트로피가 포함된 이름이 이어야 하는 파일을 편집해야 합니다 .
이를 쉘에서 표현하는 방법에는 여러 가지가 있습니다. 그 중 하나는 큰따옴표를 사용하는 것인데, 이 방법 ls
도 효과가 있습니다: "Chapitre 2 : L'accès au système.md"
. 이는 내부의 어떤 문자도 큰따옴표로 묶인 특별한 문자가 아니기 때문에 작동하지만(공백과 작은따옴표로만 보호됨), 예를 들어 파일 이름에 달러 기호가 포함되어 있으면 작동하지 않습니다. 달러 기호가 있는 경우 백슬래시를 사용하여 이스케이프할 수 있습니다 \$
.
또 다른 방법은 작은 따옴표 자체를 제외한 모든 항목에 작은 따옴표를 사용하고 이스케이프된 작은 따옴표를 원하는 위치에 넣는 것입니다 'Chapitre 2 : L'\''accès au système.md'
. 여기에는 'Chapitre 2 : L'
, \'
및 의 세 부분이 포함되어 있으며 'accès au système.md'
따옴표와 백슬래시가 제거되고 결과가 단일 단어로 연결됩니다 Chapitre 2 : L'accès au système.md
.
답변2
두 질문 모두 \
해석되지 않도록 이스케이프 특수 문자를 사용하십시오(bash라고 가정합니다). 귀하의 예를 따르십시오.
ls Chapitre\ 2\ :\ L\'accès\ au\ système.md
또는
gvim Chapitre\ 2\ :\ L\'accès\ au\ système.md
.
보다배쉬 참조 매뉴얼더 많은 정보를 알고 싶습니다.
답변3
공백과 특수 문자가 포함된 이름은 항상 문제의 원인이 됩니다. 인용은 항상 까다롭습니다...
gvim "Chapitre 2 : L'accès au système.md"
원하는대로 작동하고 있습니다. ls
파일 이름을 보다 명확하게 구분하기 위해 추가 따옴표(")가 표시되지만 이름에는 따옴표가 없습니다.
이렇게 하면 ls | more
보호되지 않은 이름이 표시됩니다.
더 복잡한 이름이 정말로 필요한 경우(나쁜 생각), 인용된 블록과 보호된 요소를 연결할 수 있습니다(@ferranm 참조).
예 - 3개 블록 a filename with quotes", apostrophes 'and bars (\)
의 합으로 이름이 지정된 파일을 생성할 수 있습니다 "a filename with quotes"
. ++ '", '
"apostrophes 'and bars (\)"
touch "a filename with quotes"'", '"apostrophes 'and bars (\)"