'Ø'라는 파일이 있는데 헷갈립니다.

'Ø'라는 파일이 있는데 헷갈립니다.

이전 Solaris 서버에서 호출되는 파일을 찾았지만 ¬명령줄(bash 2.05)에서 해당 파일과 상호 작용하는 방법이 혼란스럽습니다.

Ø 명령줄의 이 키와 home동일한 기능을 갖습니다 . 이 버튼을 누르면 커서가 줄의 시작 부분으로 이동합니다. rm ¬따라서 입력하여 삭제하려고 하면 rm.

vim으로 파일을 만들고 fileØ 문자를 삽입할 수 있었습니다. 문제는 모든 프로그램이 이 역할을 다르게 본다는 것입니다. 몇 가지 예:

bash-2.05# cat file
¬

bash-2.05# vim file
¬

bash-2.05# vi file
\302\254

bash-2.05# less x
"x" may be a binary file.  See it anyway? 
<C2><AC>

bash-2.05# more file
¬

bash-2.05# ls 
¬

bash-2.05# ls -q 
??

bash-2.05# ls -b 
\302\254

를 실행하여 파일을 삭제할 수 있었습니다 rm $(cat file). 하지만 제 질문은 명령줄에 입력하여 어떻게 제거할 수 있느냐는 것입니다. 작동하지 않습니다. 주어진 16진수 표현 rm \302\254으로 무엇을 해야할지 모르겠습니다 .less

명령줄에 Ø를 삽입하는 특별한 방법이 있나요?

너무 오래되었기 때문에 복제하기 어려울 수 있다는 것을 알고 있지만 어쨌든 물어볼 것이라고 생각했습니다.

고마워요, 패트릭

답변1

문자 ¬는 유니코드입니다.코드 포인트 U+00AC또는 172(십진수).

로 표현하면 utf82바이트 xC2xAC합(16진수) 또는
및 의 8진수 값이 됩니다.\302\254

이것이 바로 bash에서 다양한 방법으로 이와 같은 문자를 인쇄할 수 있는 이유입니다:

$ printf '\302\254'         # Add a \n to add a new line.
¬

$ printf '\xC2\xAC'
¬

$ echo -e '\0302\0254'        # Bash echo is special for requiring -e.
¬

$ echo -e '\xC2\xAC'
¬

$ echo $'\302\254'
¬

$ echo $'\xC2\xAC'
¬

또는 UNICODE 값을 직접 사용할 수도 있습니다(콘솔이 utf8을 사용하도록 올바르게 설정되어 있고 [2011년 2월 27일] Bash 버전 4.2가 bash 2.05에서 작동하지 않는 경우에만):

$ echo $'\u00AC'
¬

$ echo $'\U000000AC'
¬

위의 방법 중 하나가 작동합니다.명령 대체 명령에 인수로 문자를 전달합니다 rm.

$ rm "$(printf '\xC2\xAC')"

콘솔이 올바르게 설정된 경우. -를 사용한 다음 홈 키를 사용하여 화면의
문자를 인쇄할 수 있습니다.¬CTRLV

위키피디아에서

Unix 대화형 터미널은 Control-V를 사용하여 "다음 문자는 문자 그대로 처리되어야 합니다"를 의미합니다(여기서 니모닉은 "v는 축어를 나타냄"입니다).

rmspaceCTRLvhome# what you type.
RM ←# what you get.


당연하지 만약당신은 할 수copy and paste

마우스를 사용하여 사용하려는 문자를 선택하세요.

left-click just before the character
move the mouse one character to the right
release the mouse left-click

ctrlinsert그런 다음 복사를 누릅니다 . 마우스 오른쪽 버튼을 클릭하고(선택 창이 나타남) 을 선택해야 할 수도 있습니다 copy.

그런 다음 문자를 삽입하려는 위치로 커서를 이동합니다.

그리고 눌러서 shiftinsert붙여넣으세요.

마지막 방법을 사용하면 실제로 다음 명령을 작성할 수 있습니다.

$ rm ¬

답변2

사용:

rm $'\xc2\xac'

UTF-8 인코딩의 유니코드 문자는 ¬bytes 로 구성되며 c2위 의 acbash $'...'기능은 이러한 바이트를 16진수 형식으로 입력하는 데 사용됩니다.

유니코드를 지원하는 터미널에서는 이 작업이 필요하지 않습니다. rm ¬이 해결 방법은 유니코드가 지원되지 않는 경우에만 필요합니다.

문서

Bash의 $'...'기능(2.0에 추가되고 ksh93에서 복사되었으며 , FreeBSD에서도 사용 가능 zsh) mkshsh매우 강력합니다. 에서 man bash:

$'string' 형식의 단어는 특별하게 처리됩니다. 단어는 ANSI C 표준에 지정된 대로 대체된 백슬래시 이스케이프 문자를 사용하여 문자열로 확장됩니다. 백슬래시 이스케이프 시퀀스가 ​​있는 경우 다음과 같이 디코딩됩니다.

          \a     alert (bell)
          \b     backspace
          \e
          \E     an escape character
          \f     form feed
          \n     new line
          \r     carriage return
          \t     horizontal tab
          \v     vertical tab
          \\     backslash
          \'     single quote
          \"     double quote
          \nnn   the eight-bit character whose value is the octal value nnn (one to three digits)
          \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
          \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
          \UHHHHHHHH
                 the  Unicode  (ISO/IEC  10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex
                 digits)
          \cx    a control-x character

\xHH16진수 바이트를 입력하려면 형식(2.02에 추가됨) 만 사용합니다 .

\uHHHH복사된 것은 zsh4.2에만 추가되었으므로 작동하지 않지만 bash(또는 zsh또는 ksh93FreeBSD mksh) 최신 버전에서는 sh현재 로케일이 UTF-8 문자 세트를 사용한다고 가정하면 다음을 수행할 수도 있습니다:

rm $'\u00AC'

답변3

작은따옴표를 사용하면 모든 종류의 셸 확장을 방지하고 모든 것이 있는 그대로 작동합니다. 예를 들어 rm '¬'파일을 삭제해야 합니다.

답변4

어때요?

rm -i * 

파일이 위치한 디렉토리에 있습니까?

관련 정보