Bash 変数とは何ですか?また、どのように使用できますか?
Bash を使用すると、テキストの文字列全体を単一の変数にマップできるため、その使用とスクリプトの作成が簡素化されます。それらはどのように機能し、どのように使用できるのでしょうか? 確認してみましょう。
Bash変数とは何ですか?
変数は、さまざまな英数字の値を含めることができる、覚えやすい名前です。これらは、スクリプトやコードを書き直すことなく、同じ関数を異なる値に適用できるため便利です。また、個々の値を扱う代わりに、すべての値に同じ名前を使用できるため、スクリプト/コードの記述が簡単になります。
リアルタイム変数
Bash では変数を使用できます。変数をオンザフライで作成し、現在の Bash セッション中に再利用できます。これらはさまざまな方法で Bash の使用を支援し、現在のセッションが終了すると削除されます。
たとえば、多数のサイトにアクセスしているとします。研究を行ったり、データをスクレイピングしたりして、次の変数を作成する場合があります。
sitea=https://www.maketecheasier.com
その後、Firefox でサイトにアクセスしたい場合は、次のように入力します。
firefox $sitea
はるかに簡単になり、さらに読みやすくなりました。変数は$sitea
、その内容を手動で変更するか、Bash セッションが終了するまで、サイトにマップされたままになります。そしてもちろん、siteb
、sitec
、 などのさらに多くの変数を作成することもできますsited
。
新しい変数を設定するときは、任意の名前を使用し、その中に任意の英数字文字列を保存できます。ただし、デフォルトでは大文字と小文字が区別されることに注意してください。したがって、 は$sitea
と同じではありません$SiteA
。また、特殊文字 (スペースを含む) を含む文字列を保存する場合は、引用符を使用する必要があることに注意してください。
スクリプト内の変数
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 回入力する必要があります。何回も何回も。これを変数に割り当てると、ユーザーごとに 1 回変更するだけで済み、テキスト内のユーザー名の言及がすべて更新されます。
永続的な Bash 変数とエイリアス
変数を一時的に設定する方法と、より永続的なものとして変数を独自のスクリプトに組み込む方法について説明しました。「~/.bashrc」ファイルを編集して、Bash に変数を永続的に設定することもできます。
- お気に入りのテキストエディタでファイル「~/.bashrc」を開きます。
nano ~/.bashrc
- プロセスがうまくいかない場合にどこを調べればよいかわかるように、変数を 1 つだけ追加してテスト実行から始めることをお勧めします。ファイルの最後に移動し、新しい行に変数を追加します。
myname="Ramces Red"
- ファイルを保存してエディタを終了します。調整はすぐには適用されません。有効にするには、ターミナルに次のように入力します。
source ~/.bashrc
- Bash セッションで新しく設定された変数を使用します。
echo $myname
必要なだけ変数を設定でき、Bash での日常の冒険を大幅に簡素化できます。
生産性をさらに高めるために、別の種類の変数、つまりエイリアスを設定することも価値があります。コマンドで使用できるデータにマップされる一般的な変数とは異なり、実際のコマンドの代わりにエイリアスが使用されます。
覚えやすい変数を使用して長いテキスト文字列を保持できるのと同じように、複雑なコマンドの簡単な代替としてエイリアスを使用できます。詳細については、こちらをご覧ください。ここでは、7zip 圧縮コマンド全体を 2 文字のエイリアスに変換しています。
最後に、.bashrc で変数を永続的に設定した場合でも、前に見たように、一時的に別の値を再割り当てすることができます。この変数は、現在の Bash セッションが終了する (ログアウトまたは再起動後) か、リソースを再取得するまで、新しいコンテンツを表示します。.bashrcファイル。
配列の作成
ほとんどの Bash ユーザーは、変数をデータの一部とラベルの間の単純なリンクとして考えていますが、変数を配列のマーカーとして使用することもできます。これらは、複数の値を番号付きインデックス形式で保存できるデータ構造の一種です。配列を作成するには、次の手順に従います。
- 空のシェル スクリプトを作成します。
nano array.sh
- サブコマンドを使用して
declare
、現在のシェル プロセスで Bash 配列を初期化します。
declare -a myarray
- 組み込みの Bash 代入演算子を使用して、新しい配列を設定します。たとえば、次のコード行は、内部に 5 つの要素を含む配列を作成します。
myarray=([0]=hello [1]=maketecheasier [2]=its [3]=an [4]=array)
- コマンドを使用して新しい配列
echo
からデータを取得し、新しい配列が機能するかどうかをテストします。
echo ${myarray[1]}
「*」演算子を使用して配列の内容をストリーミングすることもできます。
echo ${myarray[*]}
サブシェル変数の実行
Bash の最大の機能の 1 つは、プログラムが基本関数であるかのように実行できるサブシェルを作成できる機能です。たとえば、ls -a
シェル スクリプトを記述して実行すると、現在の作業ディレクトリの内容が出力されます。
これは制限的であるように見えるかもしれませんが、Bash はこれらのプログラムの出力を変数内に保存できるようにすることでこれを拡張します。これにより、スクリプト内の他のプログラムへの入力としてそれらを使用できるようになります。
- サブシェル変数を使用するには、まず空のシェル スクリプトを作成します。
nano subshell.sh
- 新しいシェル スクリプト内に次の定型コードを記述します。
#!/bin/bash
mysubshell=$(x)echo "The output of the variable is $mysubshell"
- 「x」を、実行して出力を保存するコマンドに置き換えます。たとえば、次のコードは world.txt ファイルの内容を取得し、「world」という単語を「maketecheasyer」に置き換えます。
mysubshell=$(sed s/world/maketecheasier/g world.txt)
- 新しいスクリプトを実行して、新しいサブシェル変数をテストします。
chmod u+x. /subshell.sh
bash. /subshell.sh
参考: 変数に加えて、Bash で知っておくべき特殊文字は次のとおりです。
部分文字列の操作
データの保存と取得以外に、変数の内容を変更することもできます。Bash には、すべての変数の末尾に付加できる一連の演算子があり、これを使用すると、追加のプログラムを呼び出さずにスクリプトを微調整できます。
- 空のシェル スクリプトを作成します。
nano substring.sh
- 空のスクリプト内に次の定型コードを記述します。
#!/bin/bash
mysubstring=hello.txt.old
echo "My filename is: ${mysubstring}"
- 基本的な部分文字列操作には 3 つの形式があります。まず、「#」文字は、シェルが変数の先頭から削除する正規表現パターンを受け入れます。
#!/bin/bash
mysubstring=hello.txt.old
echo "My filename is: ${mysubstring#*.}"
- 次に、「%」文字は、シェルが変数の末尾で削除する正規表現パターンも受け入れます。
#!/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}"
よくある質問
変数内でシェルスクリプトを実行することは可能ですか?
はい、実行するスクリプトのフルパスを記述します。たとえば、実行すると$(/home/ramces/.scripts/sample.sh)
Bash サブシェルが作成され、ホーム ディレクトリから「sample.sh」スクリプトが実行されます。
スクリプトの実行中に変数を削除できますか?
はい。unset
スクリプト内でサブコマンドの後に変数名を挿入することで、実行中のシェル プロセスから変数を削除できます。このコマンドを実行しても、現在のシェル プロセスの外部で実行される変数は削除されないことに注意することが重要です。
外部シェルスクリプト内で永続変数を使用できますか?
はい。現在のシェル プロセスの外部で宣言された変数の値を参照することができます。ただし、外部変数は一時的に上書きされやすいため、使用する場合には注意が必要です。
画像クレジット: Unsplash。すべての変更とスクリーンショットは Ramces Red によるものです。
コメントを残す