基本構文(12)
「Command Mode」と「Expression Mode」
MSHがコマンドを構文解析する際、「Command Mode」と「Expression Mode」の2つのモードが存在します。
モードによって構文の解釈の仕方が異なる事を知っておく必要があるでしょう。
Expression Mode
- 数値→数値
- 「"」で囲まれた文字列→文字列
と解釈されます。
Expression Modeの例
MSH C:\> 2+2 4 MSH C:\> "2"+"2" 22
- 「"」で囲まない2→数値
- 「"」で囲まれた2→文字列
Command Mode
- 「変数」「カッコで囲まれたもの」以外は全て文字列
と解釈されます。
Command Modeの例
MSH C:\> Write-Host 2+2 2+2
- 「2」、「+」、「2」→文字列
「&(アンバサンド)」と「Command Mode」
コマンドを「&(アンバサンド)」で始めると、「Command Mode」と解釈されます。
文字列をコマンドと解釈させる
MSH C:\> $a = "Get-ChildItem" MSH C:\> &$a Directory: FileSystem::C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2005/07/30 17:08 0 AUTOEXEC.BAT -a--- 2005/07/30 17:08 0 CONFIG.SYS -a--- 2005/07/24 13:17 385 vcvars32.bat d---- 2005/07/30 17:29 Documents and Settings d---- 2005/08/29 0:21 MSH d-r-- 2005/09/18 5:57 Program Files d---- 2005/08/27 22:58 WINDOWS
「&」の使い所としては、
- 条件によって異なる「コマンド文字列」を生成し「&」を先頭に付けてで実行。
というのが最も有効そうです。