LoginSignup
20
15

More than 5 years have passed since last update.

PowerShellの環境変数と自動変数

Last updated at Posted at 2015-11-07

環境変数はプロバイダEnvの中にあるよ

ちょいちょいシェルスクリプトを書いていて、うっかり変数$HOMEでホームディレクトリを参照してしまうわけですが、ふと気になって環境変数を覗いてみたらそんなのないです。

(*'-') >> Get-ChildItem env: | Where-Object {$_.Name -match "HOME"}

Name                           Value
----                           -----
HOMEDRIVE                      C:
HOMEPATH                       \Users\home


(*'-') >> Get-Content $profile | Select-String "HOME"
(*'-') >>

ドライブとパスがそれぞれ別々に違う名前で設定されてますね。当然プロファイルファイルの$PROFILEにも書いてありません。おかしいな、ちゃんと$HOMEが正しく展開されているのに。。。

自動的に設定される自動変数

まぁ、環境変数も上記の通り一部自動的に設定されるんですが、PowerShellには自動変数というものがあるのを忘れていました。起動直後にGet-Variableで変数リストを覗いてみると…。

(*'-') >> Get-Variable | Where-Object {$_.Name -match "HOME"}

Name                           Value
----                           -----
HOME                           C:\Users\home
PSHOME                         C:\Windows\System32\WindowsPowerShell\v1.0


(*'-') >>

ありました!

自動変数、普段無意識に使っているものもありますね。$PROFILEとか$_とか。

シェルスクリプトで使いそうな自動変数

個人的に使いそうなものをまとめてみました。

変数名
\$_ 入力行一行分
\$^ 入力行の行頭単語
\$\$ 入力行の行末単語
\$? 直前のコマンド実行結果のBool値
\$Args 引数リスト
\$False 偽のBool値
\$Home ドライブレター込みのホームディレクトリパス
\$LastExitCode 直前のコマンドの戻り値
\$MyInvocation 実行コマンド自身の情報
\$OFS awkでお馴染みの出力時フィールドセパレータ
\$PsVersionTable PowerShellのバージョン情報
\$Pwd ドライブレター込みのカレントディレクトパス
\$True 真のBool値

おまけ

$MyInvocationはスクリプト自身のパスが知りたいときに使いますね。

(*'-') >> Get-Location

Path
----
C:\


(*'-') >> Get-Content C:\Users\home\place.ps1
"Script Path: $(Split-Path -Parent $MyInvocation.MyCommand.Path)"
"Current Path: $Pwd"
(*'-') >> C:\Users\home\place.ps1
Script Path: C:\Users\home
Current Path: C:\
(*'-') >>

こんな感じ。

20
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15