Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Bashの連想配列でデータを自在に管理する

シェルスクリプトでも、Python、C++、さらにはScratchでも、コードを書いたことがある人なら、変数がいかに重要かをご存じでしょう。コンピュータやプログラマは変数を「中継地点」として使い、情報をやり取りします。たとえば、シェルスクリプトでユーザー名を処理する場合、変数を用意し、そこにユーザー名を格納し、その変数に対して何らかの操作(許可されたユーザーのリストとの照合など)を行うようコンピュータに指示します。変数が重要なのは、コードを動的にできるからです。実行のたびに変化する情報のプレースホルダーとして機能するためです。

しかし、変数はあまりにも頻繁に使われるため、扱いにくくなることもあります。プロジェクトが大きくなると変数が増えすぎて、すべてを把握するのがほぼ不可能になることも珍しくありません。関連する変数に共通の接頭辞を付ける(user_name、user_pass、user_timeなど)といった命名規則を工夫したり、参照用のマスターリストを作ったりする方法もありますが、管理にかかる手間は大きな負担になりがちです。

この問題への伝統的な解決策が「配列」です。配列は多くのプログラミング言語でうまく機能しており、Bashのようなシェルスクリプト言語でも同じことが言えます。

ほとんどのシェルには、インデックス配列(添字配列)を作成・操作・照会する機能が備わっています。平たく言えば、インデックス配列とは「番号付きの項目リスト」のことです。項目とその番号は1つの変数にまとめられているため、コードの中で簡単に持ち運べます。

一方、Bashには連想配列を作成する機能があり、これらは通常の配列と同じように扱えます。連想配列を使うと、番号付きの値だけでなく、「キーと値」のペアによるリストを作成できます。

まず、任意のキーに値を代入してみましょう。

$ declare -A userdata
$ userdata[name]=seth
$ userdata[pass]=8eab07eb620533b083f241ec4e6b9724
$ userdata[login]=`date --utc +%s`

次に、任意のキーを照会します。

$ echo "${userdata[name]}"
seth
$ echo "${userdata[login]}"
1583362192

配列に期待される一般的な操作のほとんどが利用可能です。たとえば、すべての値を一覧表示できます。

$ echo "${userdata[*]}"
8eab07eb620533b083f241ec4e6b9724 seth 1583362192

配列全体の内容を確認することもできます。

$ typeset -A
declare -A BASH_ALIASES='()'
declare -A BASH_CMDS='()'
declare -A userdata='([pass]="8eab07eb620533b083f241ec4e6b9724"
[name]="seth"
[login]="1583362192" )'

unsetコマンドを使えば、配列から特定の項目を削除することもできます。

$ unset userdata[pass]
$ typeset -A
[...]
declare -A userdata='([name]="seth"
[login]="1583362192" )'

最後に、配列全体をまとめて削除することも可能です。

$ unset "userdata[*]"

データ管理に配列を活用する

配列は、関連するデータをひとまとめに格納するのに便利なツールです。多くの場合は普通の変数で十分ですが、ひとつのデータ「オブジェクト」の属性を配列にまとめて格納すると、データが整理され、インデックスも付けられるため、より論理的な構造になります。たとえば、utmpから取得したログイン名とログイン時刻を処理する場合、2つのデータを無関係な別々の変数として保存するよりも、ログイン時刻を該当ユーザーと関連付けて保存したほうがはるかに有用です。

さらに、変数と違って、配列の要素は事前に存在している必要がありません。データを格納する前に、どれだけのデータが格納されるのかを正確に把握しておく必要もありません。これは、制御や予測が難しいデータを処理する際に大きな利点となります。utmpに何人のユーザーが記録されるかは日によって異なるため、すべてのエントリーを収めるスクリプトを事前に組み上げるのは困難です。しかし配列なら、配列を1つ宣言してデータを読み込むだけで、取り込むデータがなくなるまで新しいキーと値のペアを自動的に作成し続けられます。

配列は非常に強力な機能であり、Bash以外のさまざまなプログラミング言語でも広く使われています。ぜひ今日から活用してみましょう。

  1. 声だけで Windows 10 パソコンを操作する方法

    音声認識がまだ発展途上だった頃は、ロボットのようにゆっくり話しても、言葉の半分程度しか認識されないのが当たり前でした。しかし現在では、あらゆるスマートフォンに音声アシスタントが搭載され、メモを素早く取ったり、アプリを開いたりといった操作を音声で簡単に行えるようになっています。実は、Windows 10パソコンでも音声による操作が可能です。これは単なる便利な機能にとどまらず、生産性向上に大きく役立つものであり、特定の障害をお持ちの方にとっては、パソコンを自在に操作するための有効な手段にもなります。「音声操作」と「音声入力(ディクテーション)」の違いあなたが求めているのは、Windows 10を声

  2. SlackからMicrosoft Teamsへ移行!データを持ち越すための完全ガイド

    Microsoft Teamsへの移行を決めたなら、Slackのデータも簡単に持ち込むことができます。この作業はIT管理者や専門家に適しており、データ移行の際には管理者が押さえておくべきいくつかの手順があります。本記事では、SlackからTeamsへ移行する具体的な方法をステップごとにご紹介します。 ステップ1:移行計画を立てる SlackからTeamsへの移行の第一歩は、綿密な移行計画を立てることです。使用しているSlackのプランによって、Teamsへエクスポート・移行できるデータとできないデータが決まる点に注意が必要です。Slackにはこのための専用ページが用意されているので、次のステ