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クイックリカバリソリューション

なぜこのような記事を書いたかというと、数日前の夜、仕事が終わろうとしていたときに、業務側で突然、テー...

VMware IOInsight を使用して、仮想マシンのストレージ パフォーマンスの監視を改良する

例: VMware IOInsight は、VM のストレージ I/O 動作を理解するのに役立つツー...

SQL ROW_NUMBER() および OVER() メソッドのケーススタディ

構文フォーマット: row_number() over(partition by grouping ...

MySQL のグループ分けの例

mysql のような php switch case ステートメント。 xxフィールドを選択、ケース...

MySQL 起動エラーを解決する: エラー 2003 (HY000): 'localhost' の MySQL サーバーに接続できません (10061)

このエラーは初心者によく発生します。この記事では主に、エラー 2003 (HY000): '...

HTMLにリンクを挿入する方法

各 Web ページには、URL () で識別されるアドレスがあります。通常、Web サイト内でリンク...

TypeScript ジェネリックパラメータのデフォルト型と新しい厳密なコンパイルオプション

目次概要コンポーネントクラスの型定義を作成するジェネリック型を使用してPropsとStateを定義す...

Vueプロジェクトをパッケージ化してリリースする手順

目次1. 開発環境から本番環境への移行2. 統一されたリクエストパスを設定する3. パッケージ化コマ...

CSS における位置指定の概要

CSS には 4 種類の配置方法があり、シナリオによって効果が異なります。ここでは、これら 4 種類...

Vuex データの永続性を実装するためのアイデアとコード

vuexとはvuex: vue.js専用に開発された状態管理ツールで、すべてのコンポーネントの状態を...

Linux での MySql centos7 のバイナリコンパイルとインストールに関するチュートリアル

// これをインストールするのに丸一日かかったので、記録するためにメモを書きました。 //何か問題が...

mysql ルートユーザーを認証できず、Navicat リモート認証プロンプト 1044 の問題を解決します

まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...

Google Recaptcha 認証を使用した Vue 実装例

最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...

Linuxにgitをインストールする方法

1. はじめにGit は、規模の大小を問わずあらゆるプロジェクトを俊敏かつ効率的に処理するために使用...

LinuxでのMySQLのインストール手順

1. mysql tar ファイルをダウンロードします。参考: 2. インストールパッケージがあるデ...