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 エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...

DockerコンテナのIPアドレスを表示する方法

私はずっとDockerにはIPアドレスがないと思っていました。実はDockerのネットワークテンプレ...

vue3 テレポートの詳細な使用例

公式ウェブサイトhttps://cli.vuejs.org/ja/ガイド/場合によっては、コンポーネ...

vue-resource インターセプターの使用に関する詳細な説明

序文インターセプター最近のフロントエンド フレームワークでは、インターセプターは基本的に非常に基本的...

モバイルデバイスでインラインスクロールを実装するための4つのソリューションの詳細な説明

ニーズの発見領域の一部のみスクロールでき、残りの部分は移動できない場合、どのような方法を使用しますか...

Vue3 コンポジション API でロジックの再利用を実装する方法

Composition API はロジック再利用手順を実装します。ロジックコードを関数に抽出します。...

CSS 手法を使用してモジュール性を実現する例

1. CSS 方法論とは何ですか? CSS methodologiesデザイン パターンまたは CS...

ハイパーリンクの幅と高さを直接設定できない問題の解決策

幅と高さを直接使用することはできません。 display:block; または display:in...

Dockerでnginxを実行し、ローカルディレクトリをイメージにマウントする方法

1 hupからイメージを取得する docker プル nginx 2 マウントするディレクトリを作成...

MySQL 8.0.16 圧縮版のダウンロードと Win10 システムへのインストール チュートリアル

公式サイトからダウンロード: https://www.mysql.com MySQLの公式サイトにア...

航空機戦争ゲームを実装するためのJavaScript

この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...

2つのシンプルなメニューナビゲーションバーの例

メニューバーの例 1: コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

Vue-routerルーティングの使い方

目次1. 説明2. インストール3. テスト1. 説明Vue Router は、Vue.js の公式...