Bash変数とは何か、そしてそれをどのように使用できますか?

ノートパソコンを使ってプログラミングをしている人の写真。

Bashでは、テキストの全体を単一の変数にマッピングすることができ、使用やスクリプト作成が簡単になります。これらはどのように機能し、どのように使用できますか?さあ、見てみましょう。

目次

  • Bash変数とは?
  • リアルタイム変数
  • スクリプト内の変数
  • 永続的なBash変数とエイリアス
  • 配列の作成
  • サブシェル変数の実行
  • サブストリング操作
  • よくある質問

Bash変数とは?

変数は、異なる英数字の値を含むことができる覚えやすい名前です。これらは便利で、スクリプトやコードの一部を再記述することなく、異なる値に同じ機能を適用することができます。また、個々の値を扱う代わりに、すべての値に同じ名前を使用できるため、スクリプトやコードの記述が容易になります。

リアルタイム変数

Bashでは、変数を使用することができます。リアルタイムで変数を作成し、現在のBashセッション中に再利用することができます。これらはBashの使用をさまざまな方法で支援し、現在のセッションが終了すると消えます。

たとえば、いくつかのサイトを訪問しているとしましょう。リサーチを行ったりデータをスクレイピングしたりして、次の変数を作成することができます:

sitea=https://www.maketecheasier.com

基本的な変数割り当てを示す端末。

その後、Firefoxで私たちのサイトを訪れたい場合は、次のように入力するだけです:

firefox $sitea

プログラムの引数として変数を示す端末。

ずっと簡単で、読みやすいです。$sitea変数は、手動でその内容を変更するか、Bashセッションが終了するまでサイトにマッピングされたままになります。そしてもちろん、sitebsitecsitedなど、さらに多くの変数を作成できます。

新しい変数を設定する際には、任意の名前を使用し、任意の英数字の文字列をその中に保存できます。ただし、デフォルトでは大文字と小文字が区別されることに注意してください。したがって、$sitea$SiteAとは異なります。また、特殊文字(スペースを含む)を含む文字列を保存する際には、引用符を使用する必要があります。

ヒント:Bashに不慣れな方は、これらの基本的なBashコマンドから始めてください。

スクリプト内の変数

Bashの変数は、スクリプトを書く際により便利です。なぜなら、単一のスクリプトを書き、それを通じて異なる文字列を反復処理したり、カスタマイズされたデータの断片に作用させたりできるからです。たとえば、誰もが自分のコンピュータで使用できるスクリプトを書いているとしましょうが、毎回パーソナライズされた挨拶を表示する必要があります。変数がなければ、各ユーザーのためにスクリプトの異なるバージョンを書く必要があります。変数を使うことで、スクリプトを同じままに保ち、ユーザーの名前だけを変更できます。

そのようなスクリプトは次のようになります:

#!/bin/bash  

username=Ramces  
echo$username

基本的な変数割り当てスクリプトを示す端末。

上記の例は冗長に見えるかもしれませんが、コードの複雑さが増すにつれて、変数は不可欠になります。スクリプトは数百行または数千行に及び、ユーザーの名前が異なる場所に含まれている可能性があります。これをよりよく理解するために、次のようなやや異なるスクリプトを考えてみましょう:

#!/bin/bash  

username=Linus  
echo Hello $username. This is a simple script I wrote that will repeat your name - that is, $username - often as an actual example of how to use Bash variables. I hope it will make it easier to understand how to use variables to improve your Bash workflow, $username. In this case, the variable username is mapped to your name. Whenever Bash runs into it, it replaces it with $username.

複数の変数置換を含む基本的なスクリプトを示す端末。

上記のスクリプトは、username変数として定義された名前を使用してテキストを完成させます。実際のユーザーの名前を使用する場合、4回入力する必要があり、次のユーザーのために同じことを繰り返し、次のためにさらに4回入力する必要があります。何度も何度も。変数に割り当てることで、各ユーザーのために一度だけ変更すればよく、テキスト内のユーザーの名前のすべての言及が更新されます。

知っておくべきこと:変数の他に、Bashではforループも使用できます。

永続的なBash変数とエイリアス

一時的に変数を設定する方法と、より永続的なものとして自分のスクリプトに含める方法を見ました。Bashでは、”~/.bashrc”ファイルを編集することで、永続的に変数を設定することもできます。

  1. お気に入りのテキストエディタで”~/.bashrc”ファイルを開きます。
nano ~/.bashrc
  1. テストランを始めることをお勧めします。最初は単一の変数だけを追加し、プロセスがうまくいかなかった場合にどこを見ればよいかを知ることができます。ファイルの最後に移動し、新しい行に変数を追加します。
myname="Ramces Red"

bashrcファイル内の新しい永続的変数を示す端末。

  1. ファイルを保存してエディタを終了します。変更はすぐには適用されません。次のコマンドを端末に入力して、効果を発揮させます:
source ~/.bashrc
  1. Bashセッションで新しく設定した変数を使用します:
echo$myname

好きなだけ多くの変数を設定し、Bashでの日常の冒険を大幅に簡素化できます。

生産性をさらに向上させるために、別のタイプの変数、エイリアスを設定することも価値があります。通常の変数は、コマンドで使用できるデータにマッピングされますが、エイリアスは実際のコマンドの代わりに使用されます。

長いテキストの文字列を保持するために覚えやすい変数を使用できるように、複雑なコマンドの簡単な代替としてエイリアスを使用できます。ここで、7zip圧縮コマンド全体を2文字のエイリアスに変換する方法について詳しく知ることができます。

最後に、.bashrcに永続的に変数を設定した場合でも、以前に見たように、一時的に異なる値を再割り当てすることができます。変数は、現在のBashセッションが終了するまで(ログアウトまたは再起動後)または.bashrcファイルを再ソースするまで、新しい内容を表示します。

配列の作成

ほとんどのBashユーザーは、変数をデータとラベルの間の単純なリンクとして考えますが、配列のマーカーとして使用することも可能です。これらは、番号付きインデックス形式で複数の値を保存できるデータ構造の一種です。配列を作成するには、以下の手順に従います:

  1. 空のシェルスクリプトを作成します:
nano array.sh
  1. declareサブコマンドを使用して、現在のシェルプロセスでBash配列を初期化します。
declare-a myarray

配列の宣言ステップを示す端末。

  1. 組み込みのBash代入演算子を使用して、新しい配列に値を設定します。たとえば、次のコード行は5つの要素を含む配列を作成します:
myarray=([0]=hello [1]=maketecheasier [2]=its [3]=an [4]=array)

5つの要素を持つ基本的な配列を示す端末。

  1. echoコマンドを使用してデータを取得し、新しい配列が機能するかどうかをテストします:
echo${myarray[1]}

単一の配列要素を取得する配列スクリプトを示す端末。

配列の内容をストリームするには、”*”演算子を使用します:

echo${myarray[*]}

配列全体をストリーミングする配列スクリプトを示す端末。

サブシェル変数の実行

Bashの最大の特徴の1つは、サブシェルを作成する能力です。ここでは、プログラムが基本的な関数のように実行されます。たとえば、シェルスクリプト内でls -aと書いて実行すると、現在の作業ディレクトリの内容が印刷されます。

シンプルなコマンドサブシェルを示す端末。

これが制限されているように見えるかもしれませんが、Bashはこれを拡張し、これらのプログラムの出力を変数に保存できるようにします。これにより、スクリプト内の他のプログラムの入力として使用できます。

  1. サブシェル変数を使用するには、まず空のシェルスクリプトを作成します:
nano subshell.sh
  1. 新しいシェルスクリプト内に次のボイラープレートコードを書きます:
#!/bin/bash  

mysubshell=$(x)  
echo"The output of the variable is $mysubshell"
  1. “x”を実行したいコマンドに置き換え、その出力を保存します。たとえば、次のようにすると、world.txtファイルの内容を取得し、「world」を「maketecheasier」に置き換えます。
mysubshell=$(sed s/world/maketecheasier/g world.txt)

シンプルなサブシェル実行を示す端末。

  1. 新しいスクリプトを実行して、新しいサブシェル変数をテストします:
chmod u+x ./subshell.sh  
bash ./subshell.sh

サブシェルスクリプトの出力を示す端末。

FYI:変数の他に、Bashで知っておくべき特殊文字があります。

サブストリング操作

データを保存して取得するだけでなく、変数の内容を変更することもできます。Bashには、各変数の末尾に付けることができる演算子のセットがあり、追加のプログラムを呼び出すことなくスクリプトを微調整できます。

  1. 空のシェルスクリプトを作成します:
nano substring.sh
  1. 空のスクリプト内に次のボイラープレートコードを書きます:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"My filename is: ${mysubstring}"
  1. 基本的なサブストリング操作は3つの形式で行われます。まず、”#”文字は、シェルが変数の先頭で削除する正規表現パターンを受け入れます:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"My filename is: ${mysubstring#*.}"

基本的なプレフィックスサブストリング操作を示す端末。

  1. 次に、”%”文字も変数の末尾で削除する正規表現パターンを受け入れます:
#!/bin/bash  

mysubstring=hello.txt.old  
echo"My filename is: ${mysubstring%.*}"

基本的なポストフィックスサブストリング操作を示す端末。

  • Bashは、変数の内容を選択的に変更する方法も提供します。sedプログラムに似て、”/“文字を使用して、変数内の任意の文字列を見つけて置き換えることができます:
#!/bin/bash  

mysubstring=hello.txt  
echo"My filename is: ${mysubstring/hello/maketecheasier}"

基本的なストリーム編集サブストリング機能を示す端末。

知っておくべきこと:正規表現は、すべてのLinuxユーザーのツールキットにおいて重要なツールです。使い方を効果的に学ぶために、簡単に学べるチートシートを通じて学びましょう。

よくある質問

変数内でシェルスクリプトを実行することは可能ですか?

はい、実行したいスクリプトの完全なパスを書けば可能です。たとえば、$(/home/ramces/.scripts/sample.sh)を実行すると、Bashサブシェルが作成され、ホームディレクトリから”sample.sh”スクリプトが実行されます。

スクリプトが実行中に変数を削除できますか?

はい。スクリプト内でunsetサブコマンドを挿入し、変数の名前を続けることで、実行中のシェルプロセスから変数を削除できます。このコマンドを実行しても、現在のシェルプロセスの外で実行される変数は削除されないことに注意してください。

外部シェルスクリプト内で永続的な変数を使用できますか?

はい。現在のシェルプロセスの外で宣言された変数の値を参照することは可能です。ただし、外部変数を使用する際には、簡単に一時的に上書きされる可能性があるため、注意が必要です。

画像クレジット:Unsplash。すべての変更とスクリーンショットはRamces Redによるものです。