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

推薦する

Vueは不規則なスクリーンショットを実装する

目次SVG による画像キャプチャCSS部分エフェクト画像表示ソースコードアドレスこれまで見てきたもの...

MySQL グループレプリケーションの設定手順 (推奨)

MySQL-Group-Replication は、MySQL-5.7.17 で開発された新しい機...

JavaScript 組み込みオブジェクトの概要

目次1. 組み込みオブジェクト2. 数学オブジェクト1. Mathオブジェクトの使用2. 指定された...

MySQL InnoDB の重要なコンポーネントの概要

Innodbには以下のコンポーネントが含まれています1. innodb_buffer_pool:これ...

MySQL-8.0.26 構成グラフィックチュートリアル

はじめに: 最近、会社のプロジェクトでデータベースのバージョンが変更されました。ここでは、MySQL...

MySQLの制限を使用して大規模なページングの問題を解決する方法

序文日常の開発では、MySQL を使用してページングを実装する場合、常に MySQL 制限構文を使用...

スクラッチ宝くじの例を実現する JavaScript キャンバス

この記事では、スクラッチ効果を実現するためのJavaScriptキャンバスの具体的なコードを参考まで...

Vue.jsはシンプルな折りたたみパネルを実装します

この記事では、Vue.jsの具体的なコードを共有して、シンプルな折りたたみパネルを実装する例を紹介し...

MySQL 5.1 のパスワードを変更し、MySQL データベースにリモートでログインする方法

mysql ユーザーを作成し、承認します。形式: 「ユーザー パスワード」で識別されるユーザー@ログ...

div の幅が width:100% に設定されていて、パディングまたはマージンが親要素を超えてしまう問題の解決方法

序文この記事では、div の幅を 100% に設定し、親要素を超えてパディングまたはマージンを設定す...

ミニプログラムはミニプログラムクラウドを使用してWeChatの支払い機能を実装します

目次1. WeChat Payを開く1.1 アフィリエイト加盟店番号1.2 加盟店番号を追加する1....

IEのクラッシュバグ

コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...

node.js チュートリアルの Util モジュールの例の詳細な説明

目次タイプ判定から始める厳格な平等エラーファーストと約束デバッグと出力タイプ判定から始めるJavaS...

HTMLの行間設定方法と問題点

<p></p> の行間隔を設定するには、style="line-h...

WeChatアプレットを使用して天井効果を実現する方法の例

目次1. 実装2. 問題点3. より良い実装方法があるかどうか検討する要約する背景は日付のタイトルで...