【初心者向け】Bash・シェルスクリプトの変数の宣言と使い方を徹底解説
この記事では、LinuxにおけるBashおよびシェルスクリプトで変数を使用する方法を解説します。
Bash(Linuxシェル)スクリプトとは、日常的なタスクを自動化し、作業時間を節約するためにコマンドをまとめて記述したファイルのことです。
変数とは、数値やファイル名など、後で使用する値を保持しておくための仕組みです。
ここからは、Linuxシェルスクリプトで変数を定義し、使用する方法を紹介します。以下の例は、最も広く使われているLinuxシェルであるBashとZshのどちらでも動作します。
Bash変数の宣言
Bashの変数はデフォルトで型を持たない(型なし)という点に注意してください。変数に対してどんな操作が可能かを明示的に指定することはできず、使用される際の文脈から暗黙的に判断されます。
基本的に、すべての変数は文字列として保存され、使用時に文脈に応じて処理されます。たとえば、文字列に数値が含まれていれば、インクリメントしようとしたときには数値として扱われます。
以下では、MY_STRING、MY_FILE_PATH、MY_NUMBERという3つの変数を宣言しています。これらはすべて型なしの変数です。
#!/bin/bash MY_STRING="Hello Linux!" MY_FILE_PATH=/path/to/my/file.txt MY_NUMBER=4
なお、1行目の「#!」(シバン/shebang)は、このスクリプトをどのインタープリターで実行するかを指定するための記述です。
「declare」コマンドの構文
declareはBash環境固有のコマンドであり、他のシェルを使用している場合は利用できないことがあります。
declareの構文は次のとおりです。
declare OPTIONS variable_name=variable_value
各要素の意味は以下のとおりです。
- OPTIONS:省略可能。下の表から選択して、変数の型や動作を設定します
- variable_name:定義(宣言)したい変数の名前
- variable_value:その変数に代入する値
| declareオプション | 意味 | 説明 |
|---|---|---|
| -r | readonly | 読み取り専用の変数を宣言する |
| -i | integer | 整数型の変数を宣言する |
| -a | array | 配列として変数を宣言する |
| -f | function(s) | 関数として変数を宣言する |
| -x | export | スクリプトの外部へエクスポートできる変数を宣言する |
「declare」コマンドの使用例
まず文字列変数(OPTIONSを指定しない)を宣言し、続いて整数変数を宣言しています。
#!/bin/bash declare MY_STRING="Hello Linux!" declare -i MY_NUMBER=4
この状態でMY_STRINGの値をMY_NUMBERに代入しようとすると、文字列が数値として評価されないため、MY_NUMBERには0が設定されます。
declareが提供するのはあくまで基本的な型指定機能のみなので、過度に依存すべきではありません。ただし、変数が特定の型の値しか保持できないよう制限したい場合には便利です。
Bash変数の使用方法
変数を使用するには、変数名の前に$(ドル記号)を付けます。例を見てみましょう。
#!/bin/bash MY_STRING="Hello Linux!" MY_FILE_PATH=/path/to/my/file.txt MY_NUMBER=4 echo $MY_STRING # 文字列変数を出力 touch $MY_FILE_PATH # 指定したパスにファイルを作成または更新 MY_NUMBER=$(($MY_NUMBER+1)) # 数式を評価してMY_NUMBERを1増加させる
上記のスクリプトでは、touchコマンドを使ってファイルを作成・更新している点に注目してください。
また、二重括弧(())の使用にも注意が必要です。これは、括弧内の式をBashに数式として評価させるための記法です。これを忘れると、MY_NUMBERには「$MY_NUMBER+1」という文字列がそのまま代入されてしまいます。
文字列の中で変数を使う
ユーザー入力から取得したファイルパスを扱う場合など、文字列の中に変数の値を埋め込みたい場面があります。
文字列に変数を含めるには、ダブルクォートで囲まれた文字列の中に、そのまま変数を記述するだけです。
echo "This is my string: $MY_STRING"
ローカル変数
ローカル変数は、定義されたスコープ内、つまり特定の関数やループの中でのみ有効になります。
#!/bin/bash
function myFunction {
local MY_STRING="This string is only available here, in this function"
echo $MY_STRING
}
echo $MY_STRING # 変数は関数内でローカルに定義されているため、何も出力されない
-
Windows 10にBash(Linuxシェル)をインストールして使う方法【WSL完全ガイド】
Windows上でLinuxシェルをセットアップして使う方法を、Windows Subsystem for Linux(WSL)を使って解説します。 このチュートリアルは、2020年以降にリリースされた最新版のWindows 10を対象としています。古いバージョンのWindows 10でのWSLの使い方や、Windows 8/7/XP向けの別の方法については扱いません。サポートが終了したソフトウェアの使用は避けるべきだからです。どうしてもWindowsを使わなければならない場合は、必ずセキュリティ更新プログラムが提供されているバージョンを使用してください。 WSLは非常に優れたツールで、まるで
-
Bash変数チュートリアル – 基本からグローバル変数・ローカル変数まで学べる6つの実用例
Bash変数は、プログラムの実行期間中に必要となる情報を一時的に保存しておくための仕組みです。本記事はBashチュートリアルシリーズの一篇で、他のプログラミング言語と同様にBashでも変数を利用できることを踏まえ、基本的な使い方からグローバル変数とローカル変数の違いまでを、6つの実用的なサンプルを通じて解説します。 Bash変数の基本構文 変数の定義は非常にシンプルで、次の書式に従います。 VARNAME=VALUE 注意: 変数へ代入する際は、「=」記号の前後にスペースを入れてはいけません。「VAR=VALUE」のように書けば、シェルは「=」を代入記号として認識し、この行を変数への代入とし