![경로 구분자로 콜론을 선택한 이유](https://linux55.com/image/94902/%EA%B2%BD%EB%A1%9C%20%EA%B5%AC%EB%B6%84%EC%9E%90%EB%A1%9C%20%EC%BD%9C%EB%A1%A0%EC%9D%84%20%EC%84%A0%ED%83%9D%ED%95%9C%20%EC%9D%B4%EC%9C%A0.png)
:
경로 구분자로 콜론( )을 선택하는 이유는 무엇입니까 ?
"디렉토리 구분 기호"가 아니라 "경로 구분 기호"를 의미합니다. 경로 구분 기호는 환경 변수의 항목 사이에 배치되는 기호입니다 PATH
.
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:..."
^ this symbol
컴퓨터와 소프트웨어의 모든 것은 한때 누군가가 어디선가 내린 사려 깊은 결정이었습니다. 예를 들어,물결표가 홈 디렉토리를 나타내는 이유(그리고 hjkl이 vi에서 화살표 키를 나타내는 이유). 이번 결정의 배경을 알고 싶습니다.
몇 가지 무작위 사실:
콜론을 경로 구분 기호로 사용하면 이름에 콜론이 포함된 디렉터리를 경로에 추가할 수 없습니다.
POSIX에서:
<colon>
PATH에서 사용할 수 있는 디렉토리 이름은 이 컨텍스트에서 구분 기호이므로 문자 를 포함할 수 없습니다<colon>
.
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html
콜론을 탈출하는 것은 불가능해 보인다. Stack Overflow의 @Random832가 PATH 처리를 위한 소스 코드를 검사했지만 이스케이프 메커니즘을 찾지 못했습니다.
https://stackoverflow.com/questions/14661373/how-to-escape-colon-in-path-on-unix
답변1
몇 가지 조사를 한 후에는 실제 답변을 얻지 못했지만 최소한 몇 가지 역사적 사실을 뒷받침하는 이 대화에 추가할 새로운 정보가 있습니다.
저는 피터 처브입니다e
쉘에 대한 그의 강의 중 하나인 19시쯤에 그가 UNIX 쉘에 기본 편집기에 대한 별칭이 있는 이유에 대해 언급하는 것을 들을 수 있습니다 . 오래된 단말기는 그다지 편안하지도 사용하기 쉽지도 않았고, 타이핑하는 것도 불쾌한 경험이었기 때문입니다.
그는 정확한 모델을 언급했습니다.텔레타이프라이터 모델 33이 경우.
뒤쪽에일부 연구나는 이 기계가 64개의 문자 풀만 선택할 수 있고 6비트 조합인 2의 6승 문자인 US ASCII를 완전히 지원하지 않는다는 것을 발견했습니다.
사실, 이 기계는 ASCII와 전혀 관련이 없습니다. 즉, ASCII의 처음 64자도 지원하지 않습니다. 이는 단지 전혀 관련이 없는 입력 집합을 위한 것일 뿐이며 아마도 (현대 시대의) 표준 집합이 아닐 수도 있습니다. 문자 .
ASR 33 텔레타이프는 64자를 인쇄할 수 있으며 대문자, 숫자 및 기호만 허용됩니다.원천
이는 대문자를 지원하려면 실제로 6비트 이상이 필요하고 대문자가 64자 표시(또는 표를 따르려면 10진수 값 63)를 초과하기 때문에 확실히 US ASCII가 아니라는 것을 증명합니다.
0 NUL 16 DLE 32 48 0 64 @ 80 P 96 ` 112 p
1 SOH 17 DC1 33 ! 49 1 65 A 81 Q 97 a 113 q
2 STX 18 DC2 34 " 50 2 66 B 82 R 98 b 114 r
3 ETX 19 DC3 35 # 51 3 67 C 83 S 99 c 115 s
4 EOT 20 DC4 36 $ 52 4 68 D 84 T 100 d 116 t
5 ENQ 21 NAK 37 % 53 5 69 E 85 U 101 e 117 u
6 ACK 22 SYN 38 & 54 6 70 F 86 V 102 f 118 v
7 BEL 23 ETB 39 ' 55 7 71 G 87 W 103 g 119 w
8 BS 24 CAN 40 ( 56 8 72 H 88 X 104 h 120 x
9 HT 25 EM 41 ) 57 9 73 I 89 Y 105 i 121 y
10 LF 26 SUB 42 * 58 : 74 J 90 Z 106 j 122 z
11 VT 27 ESC 43 + 59 ; 75 K 91 [ 107 k 123 {
12 FF 28 FS 44 , 60 < 76 L 92 \ 108 l 124 |
13 CR 29 GS 45 - 61 = 77 M 93 ] 109 m 125 }
14 SO 30 RS 46 . 62 > 78 N 94 ^ 110 n 126 ~
15 SI 31 US 47 / 63 ? 79 O 95 _ 111 o 127 DEL
이제 우리는 이로부터 64자를 얻는다는 것을 알고 있지만 인코딩 테이블에서 이를 지원하는 실제 표준이 없으며 소문자도 없고 대문자 더하기 기호와 숫자만 있습니다.
감사해요이 웹사이트이 키보드의 입력 레이아웃을 보여드릴 수 있습니다
SHIFT 키를 눌러도 다음을 얻을 수 있습니다.
게다가추가 정보결과 문자의 물리적 연결이 인코딩되는 방법과 관련하여(이 페이지에는 ASR33 및 ASCII 문자가 비트 수준에서 다르다는 점도 명시되어 있습니다).
{
no 또는 }
only 가 있다는 것이 흥미롭다고 생각합니다 (
. )
이는 하위 쉘을 생성하는 것은 괜찮을 수 있지만 새 프로세스를 생성하는 것은 터미널에서 쉽지 않거나 허용되지 않을 수 있음을 의미합니다.
결국 진짜는 없는 것 같아과학적대답은 아마도 특별한 의미를 기다리는 "자유" 단어일 것입니다. 그러나 한 가지는 확실합니다. 쉘과 터미널은 ASCII보다 오래되었으며 오늘날 우리가 알고 있는 ASCII 또는 인코딩 테이블을 고려하면 아마도 미스터리가 해결되지 않을 것입니다.