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


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

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

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

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

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

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


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

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