Bash の山括弧の深い理解 (初心者向け)

Bash の山括弧の深い理解 (初心者向け)

序文

Bash には、ls、cd、mv などの重要な組み込みコマンドが多数あるほか、grep、awk、sed などの便利なツールも多数あります。しかし、実はこれ以外にも、ピリオド(.)、カンマ(,)、括弧(<>)、引用符(")など、Bashには接着剤として使える句読点がたくさんあります。次に、データの変換や転送に使える山括弧(<>)について見ていきましょう。

データの転送

他のプログラミング言語について少しでも知っていれば、山括弧 < と > が通常、2 つの値の大小関係を比較するための論理演算子として使用されることをご存知でしょう。まだ HTML を書いている場合、山括弧はさまざまなタグの一部として馴染みがあるでしょう。

シェル スクリプトでは、山括弧を使用してデータをある場所から別の場所に転送できます。たとえば、次のようなファイルにデータを保存できます。

ls > dir_content.txt

上記の例では、> 記号は、ls コマンドの出力をコマンド ラインに直接表示するのではなく、dir_content.txt に書き込むようにシェルに指示します。 dir_content.txt ファイルが存在しない場合は、Bash によって作成されます。ただし、dir_content.txt が空でない既存のファイルである場合は、その内容が上書きされることに注意してください。したがって、同様の操作を実行する前に注意してください。

また、> の代わりに >> を使用して、既存のデータを上書きせずにファイルの末尾に新しいデータを追加することもできます。例えば:

ls $HOME > dir_content.txt; wc -l dir_content.txt >> dir_content.txt

この一連のコマンドでは、まずホーム ディレクトリの内容が dir_content.txt ファイルに書き込まれ、次に wc -l を使用して dir_content.txt ファイル内の行数 (つまり、ホーム ディレクトリ内のファイル数) が計算され、dir_content.txt の末尾に追加されます。

私のマシンで上記のコマンドを実行すると、dir_content.txt の内容は次のようになります。

アプリケーション
ビン

デスクトップ
文書
ダウンロード
ゲーム
ISO 番号
ライブラリ
ログ
音楽
オープンSCAD
写真
公共
テンプレート
テストディレクトリ
ビデオ
17 dir_content.txt

> と >> は矢印と考えることができます。もちろん、この矢印の方向を逆にすることもできます。たとえば、コーエン兄弟の俳優の一部と、彼らが映画に出演した回数は、次のように CBActors ファイルに保存されます。

ジョン・グッドマン 5
ジョン・タートゥーロ 3
ジョージ・クルーニー 2
フランシス・マクドーマンド 6
スティーブ・ブシェミ 5
ジョン・ポリト 4
トニー・シャルーブ 3
ジェームズ・ガンドルフィーニ 1

次のようにコマンドを実行できます:

並べ替え < CBActors
フランシス・マクドーマンド 6 # 次のような出力が得られます ジョージ・クルーニー 2
ジェームズ・ガンドルフィーニ 1
ジョン・グッドマン 5
ジョン・タートゥーロ 3
ジョン・ポリト 4
スティーブ・ブシェミ 5
トニー・シャルーブ 3

sort コマンドを使用すると、このリストをアルファベット順に出力できます。ただし、sort コマンドはすでにファイルを引数として受け入れることができるため、ここで < を使用するのは冗長であり、sort CBActors を直接実行すると目的の結果が得られます。

コーエン兄弟のお気に入りの俳優が誰か知りたいなら、次の方法で調べることができます。初め:

名前 姓 films を読み取りながら、 $films $name $surname > filmsfirst.txt をエコーし​​、 done < CBActors

上記のコマンドシーケンスは、複数行に記述すると読みやすくなります。

名前の姓の映画を読みながら;\
する
echo $films $name $surname >> filmsfirst;\
完了 < CBActors

これらのコマンドが何をするのか分析してみましょう。

  • while …; do … done はループ構造です。 while の後の条件が true の場合、do と done の間の部分が繰り返し実行されます。
  • read ステートメントはコンテンツを 1 行ずつ読み取ります。 read は、読み取るものがなくなるまで標準入力から読み取りを続けます。
  • CBActors ファイルの内容は < を介して標準入力から読み取られるため、while ループは CBActors ファイルを 1 行ずつ完全に読み取ります。
  • read コマンドは、各行をスペースに応じて 3 つのフィールドに分割し、3 つのフィールドをそれぞれ name、surname、films 変数に割り当てることができます。このようにして、echo $films $name $surname >> filmsfirst;\ を通じて、フィールドの順序を簡単に並べ替えて filmsfirst ファイルに保存できます。

実行が完了したら、filmsfirst ファイルを確認すると、内容は次のようになります。

5 ジョン・グッドマン
3 ジョン・タートゥーロ
2 ジョージ・クルーニー
6 フランシス・マクドーマンド
5. スティーブ・ブシェミ
4 ジョン・ポリト
3 トニー・シャルーブ
1 ジェームズ・ガンドルフィーニ

次に sort コマンドを使用します。

ソート -r filmsfirst

コーエン兄弟のお気に入りの女優はフランシス・マクドーマンドだということがわかります。 (-r パラメータは降順を意味するため、McDormand が先頭になります)

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • Bash で山括弧を使用するその他の方法
  • Bash スクリプトで括弧とバッククォートを使用する

<<:  2017 最新バージョンの Windows インストール MySQL チュートリアル

>>:  テーブルを動的に読み込み、削除する JavaScript

推薦する

React 高階コンポーネント HOC 使用方法の概要

HOCを紹介する一文高階コンポーネント (HOC) とは何ですか? 公式ドキュメントによると、「高階...

GIFアニメーション効果を模倣した自動ビデオ再生を実現するWeChatアプレットの例

需要背景:ミニプログラムページに GIF ダイナミック画像を挿入しますが、GIF 画像は通常サイズが...

Tomcat を再デプロイした後にイメージやその他のリソースが自動的に削除される問題を解決します

昨日は写真をアップロードしてリンクを返す機能を実装していました。プロジェクトが Tomcat に再デ...

3つのDocker Nginxログの処理の詳細な説明

社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...

Vue+express+Socketでチャット機能を実現

この記事では、チャット機能を実現するためのVue+express+Socketの具体的なコードを参考...

便利で使いやすいウェブアプリケーションを設計するための 10 のヒント

より使いやすい Web アプリケーションを設計するための 10 のヒントをご紹介します。ヒント1: ...

CSS で中空効果を実装するサンプルコード

効果原理主にCSSグラデーションを使用して、切り取りを必要としない背景のくり抜きを実現します。クーポ...

JavaScript でクールなマウス テーリング効果を実装

これを見た後、あなたにも手ができて、さまざまな美しい小さなしっぽを作れるようになることを保証します!...

nginxを使用して画像サイズを動的に変換し、サムネイルを生成します。

Nginx ngx_http_image_filter_module モジュール (nginx バ...

VMware Esxi のルート パスワードを忘れた後に正常に取得する方法

CentOS6 インストール ディスク (任意のバージョン) を準備するか、別の pnux インスト...

JavaScriptエラーキャプチャの詳細な説明

目次1. 基本的な使い方とロジック2. 特徴3. エラーオブジェクト4. キャッチアンドスロー戦略の...

CSS を使用して三角形を実装する一般的な手法 (複数の方法)

面接の経験によっては、CSS に関する質問がよく見られ、CSS を使用して三角形を描画する方法につい...

MySQL はどのようにしてマスターとスレーブの一貫性を確保するのでしょうか?

目次MySQLマスタースレーブの基本原理3つのbinlog形式の比較混合形式のバイナリログが存在する...

Linux での MySQL のインストールに関する詳細なチュートリアル

1. MySQLサービスをシャットダウンする# service mysqld stop 2. rpm...

MIME TYPEとは?MIME-Typesタイプコレクション

MIME タイプとは何ですか? 1. まず、ブラウザがコンテンツを処理する方法を理解する必要がありま...