나는 스스로를 행복한 Bash 사용자라고 생각합니다. 그러나 Unix를 탐색하기 시작했을 때 기본적으로 tcsh를 제공하는 독점 Unix 시스템에 있었기 때문에 가장 초기의 셸 경험은 최신 버전의 C 셸(csh)에 있었습니다. tcsh는 내가 나중에 일하게 된 영화 스튜디오에서 선택한 쉘이기도 했기 때문에 운이 좋은 사고였습니다.
오늘날까지 논리적 상관 관계가 없음에도 불구하고 tcsh와 관련된 몇 가지 작업이 있습니다. 나는 여전히 연습을 위해 적어도 하나의 시스템에서 tcsh를 사용합니다. 또한 내 자신의 tcsh 스크립트와의 호환성을 유지하고 tcsh에서 선호하는 스크립트를 작성해야 할 때 실행할 수 있도록 모든 시스템에 설치한 상태로 유지합니다.
C 쉘과 Bash의 차이점
Tcsh는 csh의 현대적 연속입니다. C 셸이 1978년에 출시되었을 때 사용자들은 C와 같은 구문에 열광했습니다. C는 그 당시 새로운 프로그래밍 언어였으며 더 중요한 것은 Unix가 작성된 언어였기 때문에 대부분의 Unix 사용자는 임의의 스크립팅 언어보다 C에 더 익숙했습니다. 예를 들어 Bash에서 이 if
루프는 test
에 대한 "비밀" 호출을 수행합니다. 조건문을 평가하는 바이너리(괄호 안의 부분):
v=1
if [ $v -gt 0 ]
then
echo "verbose"
fi
다음은 test
에 대한 외부 호출이 없는 csh 또는 tcsh의 동일한 명령문입니다. 조건문(괄호 안의 코드)은 csh의 내장 평가를 사용하기 때문에:
set v=1
if ($v > 1) then
echo "verbose"
endif
이것은 좋고 나쁜 몇 가지를 보여줍니다. 예를 들어, C 프로그래머가 괄호 안에 조건문을 입력하는 것은 자연스러운 일이며, 프로그래머의 관점에서는 실행 파일에 수학 평가를 내장하는 것이 바람직합니다. 반면에 if
루프 구문은 구분 기호로 중괄호를 사용하는 C보다 Lua와 더 유사합니다.
// this does not work in Csh
if ( v>1 ) {
printf("verbose");
}
어떤 면에서 이것은 csh를 멋지게 요약합니다. 깨끗하고 효율적이며 일부에게는 친숙하지만 기발하고 일관성이 없습니다.
왜 그것을 사용합니까?
정밀도를 위한 Tcsh
저는 C 코드보다 C++ 및 Java를 더 많이 작성하므로 tcsh에 대한 관심은 명성에 대한 역사적 주장과 거의 관련이 없습니다. 그러나 나는 Lua를 즐기고 어떤 면에서는 Lua와 Python 또는 Markdown과 Docbook을 생각하는 것처럼 tcsh와 다른 쉘을 생각합니다. 두 쉘 모두 장점이 있으며 더 인기있는 것을 지적하기 쉽지만 다른 쉘에는 엄격한 명확성이 있습니다. 사실 저는 tcsh가 다른 많은 쉘에 없는 정밀도를 가지고 있다고 생각합니다.
변수
쉘에서 유형이 지정된 변수의 사치를 얻지는 못하지만 tcsh를 사용하면 최소한 키워드로 변수를 선언할 수 있습니다. 이상하게도 작업에 사용할 수 있는 몇 가지 키워드가 있지만 내가 결정한 키워드는 set
입니다. :
> set var=foo
> echo $var
foo
변수 이름(var
)을 입력하여 변수를 확장할 수 있습니다. 이 예에서는) Ctrl+X를 누릅니다. 뒤에 $ (달러) 키. 위의 예는 var
를 설정합니다. foo
로 .
다른 많은 쉘과 마찬가지로 set
를 사용하여 모든 세트 변수를 나열할 수 있습니다. 인수 없이 혼자:
> set
term xterm
tty pts/2
uid 1000
user seth
var foo
[...]
unset
를 사용하여 변수를 설정 해제할 수 있습니다. 명령:
> unset var
> set | grep var
>
누락된 기능은 하나의 기능입니다.
스크립트에서 다음과 같은 줄을 본 적이 있을 것입니다.
var=GitLab
${var,,}
두 번째 줄은 var
의 내용을 변환하는 내장 함수입니다. 소문자로.
이와 같은 추가 기능은 무한히 유용하지만 때로는 난독화의 초대라고 생각합니다. 쉘 스크립팅은 프로그래밍의 HTML과 같습니다. 다른 사람의 코드를 읽는 것만으로 스스로를 가르칠 수 있는 몇 안 되는 진지한 언어 중 하나입니다. 그것이 반드시 유용한 기능을 포기해야 하는 큰 이유는 아니지만 다양한 언어에서 널리 사용되는 신비한 속기의 일부를 피하려고 노력하는 이유입니다. tcsh로 작성할 때 단축어를 많이 사용할 수 있는 옵션이 없으므로 복잡한 문자열 작업은 기본 제공되는 바로 가기가 아닌 기본 Unix 도구를 사용하여 수행해야 합니다. 나는 그것이 더 읽기 쉬운 코드를 만들고 미래의 기여자와 미래의 나에게 큰 변화를 가져다준다고 믿습니다. .
내장 수학
내가 tcsh에 대해 좋아하는 것 중 하나는 내장된 @입니다. 수학 단축키. 독학으로 공부한 대부분의 Unix 사용자와 마찬가지로 나는 bc를 우연히 만났고 그 이후로 그것을 후회했습니다. bc 자체의 잘못이 아님에도 불구하고 bc는 실제로 계산 언어에 더 적합할 때 명령줄 계산기로 사용자에게 종종 가르쳐집니다. . 해결 방법에는 순수 Bash의 놀라운 300줄 계산기 또는 let Bash의 명령 또는 @ tcsh의 명령입니다.
> @ n = ( 1 + 1 / 2 )
> echo $n
1
매우 복잡한 수학의 경우 BC나 좋은 Python 수학 라이브러리를 배울 가치가 있습니다.
모든 필수 사항
저에게 tcsh는 완전한 단순성과 필수 기능 사이의 완벽한 균형을 유지합니다. 모든 사용자 또는 모든 목적을 위한 셸은 아니지만 텍스트 기반 세계에 대한 관점을 단순화하려는 경우 tcsh가 흥미로운 대안을 제공할 수 있습니다.