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

推薦する

さまざまな MySQL テーブルソートルールのエラーの分析

MySQL が複数のテーブルを結合するときに、次のエラーが報告されます: [Err]1267 – 操...

MySQL NULLデータ変換方法(必読)

MySQL を使用してデータベースをクエリし、左結合を実行すると、関連付けられたフィールドの一部に...

Linux での Makefile の書き方と使い方の詳細な説明

目次メイクファイルMakefile の命名とルールMakefile の仕組みMakefile変数Ma...

mysql5.7.14 解凍版インストールと設定方法 グラフィックチュートリアル (win10)

Win10はmysql5.7の解凍版をインストールします。参考までに、具体的な内容は次のとおりです...

CocosCreator で http と WebSocket を使用する方法

目次1. HTTPGET 2. HTTP POSTウェブソケット4. Egretのhttpとwebs...

MySQL 5.7.17 最新インストールチュートリアル(画像とテキスト付き)

mysql-5.7.17-winx64 は MySQL の最新バージョンです。インストールは無料で...

CentOS で MySQL 5.1 を 5.5.36 にアップグレードする

CentOS 6.4 環境で MySQL 5.1 を 5.5.36 にアップグレードする手順を記録し...

Ubuntu での Subversion (SVN) の詳細なインストールと設定

ソフトウェア開発者であれば、Subversion に精通している必要があります。 Subversio...

MySQL ツリー構造テーブルの設計と最適化に関する簡単な説明

序文多くの管理・オフィスシステムでは、ツリー構造がいたるところで見られます。たとえば、「部門」や「機...

MySQL 8.0.21 のインストール手順と問題解決

公式サイトをダウンロードまず公式ウェブサイトにアクセスしてMySQLをダウンロードしてくださいリンク...

Reactコンポーネントをフルスクリーンにする方法

導入この記事は、 React + antdをベースにして、完全な全屏demoを紹介します。その理由は...

MySQL の一般的なログの概要

序文: MySQL システムには、さまざまな種類のログが存在します。さまざまなログにはそれぞれ独自の...

Linux での Nginx 監視の問題

nginxのインストール仮想マシンがインターネットにアクセスできることを確認します。 1. ルートユ...

W3C チュートリアル (5): W3C XML アクティビティ

XML は、データを記述、保存、送信、交換するために設計されています。 XML 1.0 は XML ...

mysql8.0.11データディレクトリ移行の実装

mysql のデフォルトのストレージ ディレクトリは/var/lib/mysql/です。以下は、デフ...