터미널 명령에서“ '”(아포스트로피)의 의미


11

이상한 이유로, 식별자에서 단어 구분자로 " '"를 시도했습니다.

$ export foo'bar=1
> 
> ^C
$ 

위의 그림과 같이 결과는 ID EST ">"에 대한 프롬프트 변경하고 시스템이 분명히 내 역할에 대한 자세한 내용을 기다립니다. 보시다시피, ctrl-C를 탈출해야했습니다. 같은 다른 명령을 사용하는 경우에도 마찬가지입니다.

$ ls foo'bar
$ mkdir foo'bar

이 모든 의미에 대해 궁금합니다. 터미널 명령에서 " '"라는 특별한 의미가 있습니다 (실제로 id 내부에서도 분리됨).

추가 : 또한 유닉스 계열 및 Windows 시스템 (안전한 시스템의 공통 하위 집합을 얻기 위해)에서 파일 및 폴더 이름의 특수 문자 또는 유효하지 않은 문자 세트를 알고 싶습니다. 비 ASCII?).

고마워, 데니스


Linux 환경에서는 \ 0 (널) 및 /를 제외한 모든 문자가 허용됩니다. 그러나 이것이 모두 권장되는 것은 아닙니다. 많은 사람들은 쉘에 특별한 의미를 갖는 문자를 피하는 것이 가장 좋습니다. Windows에 대해 알고 싶으면 Windows 참조를 참조하십시오.
— Scott Severance

답변:


15

'문자는 쉘 명령에서 사용될 때마다 매우 강력한 문자입니다. 기본적으로 '(아포스트로피 마크)는 모든 종류의 변환 또는 수정을 비활성화합니다. 마크로 묶인 모든 것을 단일 엔티티, 즉 단일 매개 변수로 간주합니다. 절대적으로 어떤 종류의 대체 또는 확장도 일어나지 않을 것입니다.

예:

 $ echo '$HOME'

출력에서 문자열 $HOME자체를 생성하고 홈 디렉토리의 경로를 인쇄하지 않습니다. 작은 따옴표는 모든 종류의 확장을 방지하므로 대체 및 단순은 간단한 매개 변수로 존재하는 모든 것을 고려합니다.

아포스트로피를있는 그대로 사용하려면 탈출해야합니다.

 $ mkdir foo\'bar

 $ cd foo\'bar

이스케이프되지 않으면 첫 번째 예제에서와 같이 쌍이 닫힐 때까지 기다립니다.

따라서 수정 된 명령은 다음과 같습니다.

 $ export foo\'bar=1

참고 : Milan Todorovic에서 알 수 있듯이이 경우에는 아포스트로피를 사용할 수 없으므로 유효하지 않습니다.


1
@ denis63 당신이 볼 필요가 있다면 답변을 수락하시기 바랍니다 :)
— Rinzwind

7

캐릭터 '는 특별한 캐릭터입니다. 이를 사용하여 변경되지 않는 명령 줄 항목의 일부를 표시합니다 (예 : 와일드 카드를 대체하지 않음). 예를 들면 다음과 같습니다.

$ ls 'bla*'
ls: cannot access bla*: No such file or directory

이는에 대한 논쟁이 ls로 bla*시작하는 모든 것이 아니라는 것을 의미합니다 bla.

당신이 얻는 이유 >당신이 하나를 사용해야하기 때문에 문자는 '개방과 하나가 '변경되지 않습니다 부분을 닫는.

'폴더 이름 에 사용 하려면 다음과 같이 이스케이프해야합니다 \'. 따라서 이름 foo'bar이 지정된 폴더를 나열 하려면을 입력해야합니다 ls foo\'bar.

아, '환경 변수 이름 에 사용할 수 있는지 확실하지 않습니다 . 나는 당신이 사용할 수 없다고 생각합니다 export foo\'bar=1.

도움이 되었기를 바랍니다.


환경 변수 이름 제한에 대한 관찰을지지합니다.
— Frantique

아직 공감할 수는 없지만 (아스 쿠분투에 처음 임) 느낌이 있습니다. env var 이름을 확인한 것은 말 그대로입니다. (나는 구분 기호를 직접 열고 닫는 것에 대해 생각하지 않은 것이 약간 어리석은 생각이지만 작은 따옴표가 아닌 실제 아포스트로피로 " '"를 고려했습니다). 데니스
— 데니스 63
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.