BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

何年も経ってもまだtcshが好きな理由

私は自分自身を幸せなBashユーザーだと思っています。ただし、Unixの調査を開始したとき、デフォルトでtcshを提供する独自のUnixシステム上にあったため、私の初期のシェルエクスペリエンスはCシェルの最新バージョン(csh)でした。それは幸運な事故であることが判明しました。なぜなら、tcshは、私のキャリアの後半で働いていた映画スタジオでも選択されたシェルだったからです。

今日まで、論理的な相関関係はありませんが、tcshに関連付けるタスクがいくつかあります。練習を続けるためだけに、少なくとも1つのシステムでtcshを使用しています。また、自分のtcshスクリプトとの互換性を維持し、tcshで使用したいスクリプトを作成する必要があるときに起動できるように、すべてのシステムにインストールしたままにします。

CシェルとBashの違い

Tcshは、cshの最新の続きです。 1978年にCシェルがリリースされたとき、ユーザーはその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を楽しんでいます。ある意味で、tcshや、LuaやPython、さらにはMarkdownやDocbookのような他のシェルについても考えています。どちらのシェルにもメリットがあり、人気のあるシェルを簡単に指摘できますが、もう一方のシェルには厳密な明確さがあります。実際、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,,}

2行目は、varの内容を変換するための組み込み関数です。 小文字にします。

このような追加の機能は非常に便利ですが、難読化への誘いであると感じることもあります。シェルスクリプトはプログラミングのHTMLのようなものです。これは、他の人のコードを読むだけで自分自身に教えることができる数少ない深刻な言語の1つです。それは必ずしも便利な関数をあきらめる大きな理由ではありませんが、それは私がさまざまな言語で人気のある不可解な速記のいくつかを避けようとする理由です。 tcshで書くとき、私にはそれほど多くの省略形を使用するオプションがないので、複雑な文字列操作は、組み込みのショートカットではなく、基本的なUnixツールを使用して実行する必要があります。その結果、コードが読みやすくなり、将来の貢献者、そして将来の忘れられたに大きな違いをもたらすと思います。 。

組み込みの数学

tcshについて私が気に入っていることの1つは、組み込みの @です。 数学のショートカット。ほとんどの独学のUnixユーザーのように、私はbcに出くわしました、そしてそれ以来私はそれを後悔しています。 bcは、それ自体に問題がないため、実際には計算言語として適している場合に、コマンドライン計算機としてユーザーに教えられることがよくあります。 。回避策には、純粋なBashの驚くべき300行の計算機、または let Bashのコマンド、または @ tcshのコマンド。

> @ n = ( 1 + 1 / 2 )
> echo $n
1

非常に複雑な数学の場合、bcまたは優れたPython数学ライブラリを学ぶ価値があるかもしれません。

すべての必需品

私にとって、tcshは、非常にシンプルな機能と重要な機能の完璧なバランスをとっています。これは、すべてのユーザー、またはすべての目的のためのシェルではありませんが、テキストベースの世界の表示を単純化することを検討している場合は、tcshが興味深い代替手段を提供する可能性があります。


  1. Mac のインターネットが突然遅くなるのはなぜですか?

    Wi-Fi は、iPhone、iPad、MacBook など、あらゆるデバイスを使用する際に最も重要なユーティリティの 1 つです。現在、ほぼすべてのアプリケーションでインターネット接続が必要です。そのため、すべてのデバイスで常に適切な Wi-Fi 接続を確保する必要があります。ただし、Wi-Fi が適切に機能しない場合があり、MacBook での日常業務の妨げに直接つながる可能性があります。この記事では、次の質問に答えました。Mac のインターネットが急に遅くなったのはなぜですか。 下にスクロールして、Mac で Wi-Fi を高速化する方法を学びましょう。 Mac のインターネットが

  2. Happy 10th Birthday WhatsApp:私たちがあなたを愛している理由はここにあります!

    私たちは皆、テキストメッセージに夢中ですよね?これは、スマートフォンで行う最も楽しいことの 1 つです。どこにいても、旅行中でも人混みに囲まれていても、ほぼすべての状況でメールが常に私たちを救ってくれます。そして、テキストメッセージに関して言えば、WhatsAppは私たちが行きたい唯一の場所です!それはテキストメッセージ以上のものです。写真、ビデオを送信したり、現在地を共有したりできます。 WhatsApp は広く普及しており、世界中の何百万人ものユーザーに愛されています。これは、スマートフォンに必須のテキスト メッセージ アプリのようなものです。 WhatsApp は私たちの最もお気に入り