【初心者向け】PowerShellの変数の基本:作成・確認・削除・追加の方法をわかりやすく解説
コンピュータサイエンスにおいて、変数とは後で利用するために任意の情報を格納しておくメモリ上の場所のことです。言い換えれば、データを一時的に保存し、必要なときに取り出すための「入れ物」です。シェル環境では、そのデータは単語(文字列)でも数字(整数)でも構いません。
パソコンで意識的に変数を使ったことがない人でも、日常生活の中で変数に近いものを使っているはずです。「あれを取って」「これを見て」といった言葉は、文法上の変数(いわゆる代名詞)と言えます。「これ」「あれ」が何を指すのかは、話し手が頭に思い浮かべているものや指差している対象によって決まります。数学でも未知の値を記号で表しますが、それも立派な変数の活用です。
この記事では、Windows、Linux、Macで動作するPowerShellにおける変数について解説します。オープンソースのBashシェルをお使いの方は、Bashの変数に関する記事を参照してください(ただし、Linux上でもPowerShellは動作し、しかもオープンソースなので、この記事の内容もそのまま試せます)。
注: この記事の例は、Linux上で動作するPowerShellセッションのものです。WindowsやMacではファイルパスが異なりますが、Windowsは自動的に「/」を「\」に変換してくれるため、明らかな違い(たとえば、あなたのユーザー名が「seth」である可能性は統計的に低いでしょう)を読み替えれば、すべての例は全プラットフォームで動作します。
変数は何のために使うのか?
PowerShellで変数が必要かどうかは、ターミナルで何をするかによります。ある人にとって変数はデータ管理に不可欠な手段であり、別の人にとっては些細で一時的な便利ツールにすぎず、さらには存在しないも同然という人もいるでしょう。
結局のところ、変数は道具の一つです。用途が見つかれば使えばよいし、OSが管理してくれるのだから放置しても問題ありません。しかし知識は力です。変数の仕組みを理解していれば、思いがけない創造的な問題解決につながることもあります。
変数を設定する
変数の作成に特別な権限は不要です。自由に作成でき、自由に使えて、基本的に無害です。PowerShellでは、変数名を定義し、Set-Variableコマンドで値を設定することで変数を作成します。次の例では、FOOという新しい変数を作成し、その値を文字列$HOME/Documentsに設定しています。
PS> Set-Variable -Name FOO -Value "$HOME/Documents"
成功しても何も表示されないため、本当に設定されたのか不安になるかもしれません。Get-Variable(省略形はgv)コマンドで結果を目で確認できます。変数が定義したとおりに正確に読み取られていることを確実にするには、引用符で囲むのも有効です。こうすると変数内の特殊文字が保護されます。この例では該当しませんが、良い習慣として身につけておきましょう。
PS> Get-Variable "FOO" -valueOnly
/home/seth/Documents
FOOの中身が、設定したものと正確には一致していないことに気づいたでしょうか。設定したリテラル文字列は$HOME/Documentsでしたが、表示されているのは/home/seth/Documentsです。これは変数をネストできるためです。$HOME変数は現在のユーザーのホームディレクトリ(WindowsならC:\Users、Linuxなら/home、Macなら/Users)を指します。$HOMEがFOOに埋め込まれているため、呼び出し時に展開されるのです。デフォルト変数をこのように活用すると、プラットフォーム間で動作するポータブルなスクリプトを書くのに役立ちます。
変数は通常、あるシステムから別のシステムへ情報を受け渡すために使われます。この簡単な例の変数はあまり実用的ではありませんが、それでも情報を伝えることはできます。たとえばFOO変数の中身はファイルパスなので、その値が参照するディレクトリへのショートカットとして使えます。
変数そのものではなく、変数の中身を参照するには、変数名の前にドル記号($)を付けます。
PS> pwd
/home/seth
PS> cd "$FOO"
PS> pwd
/home/seth/Documents
変数をクリアする
変数はRemove-Variableコマンドで削除できます。
PS> Remove-Variable -Name "FOO"
PS> gv "FOO"
gv : Cannot find a variable with the name 'FOO'.
[...]
実際には、変数を削除する必要性はあまりありません。変数は比較的「安価」なので、作成したまま忘れてしまっても支障はありません。ただし、その変数を読み取る可能性のある別のプロセスに不要な情報を渡さないよう、変数を空にしておきたい場面もあるでしょう。
衝突防止付きで新しい変数を作成する
場合によっては、自分自身や他のプロセスによってすでに変数が設定されている可能性があることもあります。上書きしたくなければ、同名の変数がすでに存在する場合は失敗するように設計されたNew-Variableを使うか、条件文で先に変数の有無をチェックできます。
PS> New-Variable -Name FOO -Value "example"
New-Variable : A variable with name 'FOO' already exists.
注: 以下の例では、FOOが/home/seth/Documentsに設定されているものとします。
あるいは、簡単なif文を作って既存の変数をチェックすることもできます。
PS> if ( $FOO )
>> { gv FOO } else
>> { Set-Variable -Name "FOO" -Value "quux" }
変数に追加する
変数を上書きする代わりに、既存の変数に値を追加することもできます。PowerShellの変数には文字列、整数、配列などさまざまな型があります。実質的に複数の値を持つ変数を作成する場合は、区切り文字で連結した文字列にするか、配列にするかを決める必要があります。どちらでも構わないように思えるかもしれませんが、変数のデータを受け取るアプリケーション側がどちらか一方を期待している可能性があるため、ターゲットに応じて選択してください。
文字列変数にデータを追記するには、+=構文を使います。
PS> gv FOO
foo
PS> $FOO += ",bar"
PS> gv FOO
foo,bar
PS> $FOO.getType().Name
String
配列はPowerShellの特殊な型の変数で、ArrayListオブジェクトが必要です。これはPowerShellの.NET内部に踏み込む必要があるため、この記事の範囲外とします。
環境変数でグローバルにする
ここまで作成してきた変数はすべてローカル変数です。つまり、作成したPowerShellセッション内でのみ有効です。他のプロセスからアクセスできる変数を作りたい場合は、環境変数を作成します。これについては今後の記事で詳しく取り上げる予定です。
-
Windowsでカスタム環境変数を作成する方法!フォルダ・URL・アプリへのショートカット術
Windowsでは、デフォルトでいくつかの環境変数が用意されており、ユーザーはOS内の特定のパスやフォルダに素早くアクセスできるようになっています。これにより、Windowsの操作性が大きく向上しています。さらに、独自のカスタム環境変数を定義・設定すれば、アプリ、フォルダ、URLなどへの直接パスやショートカットを自由に作成することも可能です。 環境変数の基本:%(パーセント)で囲む Windowsの環境変数は、パーセント記号(%)で囲まれた形式で表されます。環境変数を使ったことがない方でも、スタートメニューを開き、検索ボックスに以下のいずれかのコマンドを入力してEnterキーを押すだけで、簡
-
PowerShellの環境変数とは?基本知識から設定・確認方法まで徹底解説
環境変数は、Linux、Mac、Windowsといったコンピューター全体で共有されるグローバルな設定値であり、システムシェルがコマンドを実行する際に参照するために保存されています。多くの環境変数は、OSのインストール時やユーザーアカウントの作成時に自動的に設定されます。 たとえば、ホームディレクトリはログイン時に環境変数として登録されます。PowerShellでの表示内容は、使用しているOSによって異なります。 OSごとのHOME変数の確認例 Windowsの場合: PS C:\Users\bogus> Get-Variable HOME -valueOnlyC:\Users\bogus