サーチ…


前書き

switch文を使用すると、変数の値リストとの等価性をテストできます。各値はケースと呼ばれ、 スイッチオンされている変数は各スイッチのケースごとにチェックされます。一連のオプションから選択できるスクリプトを書くことができますが、長い一連のif文を書く必要はありません。

備考

このトピックでは、スクリプトのフローを分岐するために使用されるswitch文について説明します。ブーリアンフラグとして機能で使用されるスイッチパラメータと混同しないでください。

シンプルなスイッチ

switch文は、単一のテスト値を複数の条件と比較し、成功した比較のために関連するアクションを実行します。複数のマッチ/アクションが発生する可能性があります。

与えられた次のスイッチ...

switch($myValue)
{
    'First Condition'    { 'First Action' }
    'Second Condition'   { 'Second Action' }
}

$myValue'First Condition'設定されている場合、 'First Action'が出力されます。

$myValue'Second Condition'設定されている場合、 'Section Action'が出力されます。

$myValueがどちらの条件とも一致しない場合、何も出力されません。

Regexパラメータを使用したswitch文

-Regexパラメータを使用すると、switch文が条件に対して正規表現マッチングを実行できます。

例:

switch -Regex ('Condition')
{ 
  'Con\D+ion'    {'One or more non-digits'}
  'Conditio*$'   {'Zero or more "o"'} 
  'C.ndition'    {'Any single char.'}  
  '^C\w+ition$'  {'Anchors and one or more word chars.'} 
  'Test'         {'No match'} 
}

出力:

One or more non-digits
Any single char.
Anchors and one or more word chars.

休憩付きの簡単なスイッチ

switch文でbreakキーワードを使用すると、すべての条件を評価する前に文を終了できます。

例:

switch('Condition')
{
  'Condition'
  {
    'First Action'
  }
  'Condition'
  {
    'Second Action'
    break
  }
  'Condition'
  {
    'Third Action'
  }
}

出力:

First Action
Second Action

2番目のアクションでbreakキーワードがあるため、3番目の条件は評価されません。

ワイルドカードパラメータを使用したswitch文

-Wildcardパラメータを使用すると、switch文は条件に対してワイルドカードマッチングを実行できます。

例:

switch -Wildcard ('Condition')
{ 
    'Condition'           {'Normal match'}
    'Condit*'             {'Zero or more wildcard chars.'} 
    'C[aoc]ndit[f-l]on'   {'Range and set of chars.'}  
    'C?ndition'           {'Single char. wildcard'}
    'Test*'               {'No match'} 
}

出力:

Normal match
Zero or more wildcard chars.
Range and set of chars.
Single char. wildcard

正確なパラメータを持つswitch文

-Exactパラメータは、switch-statementがstring-conditionsに対して大文字と小文字を区別しない完全一致を実行するように-Exactます。

例:

switch -Exact ('Condition')
{ 
  'condition'   {'First Action'}
  'Condition'   {'Second Action'} 
  'conditioN'   {'Third Action'}  
  '^*ondition$' {'Fourth Action'} 
  'Conditio*'   {'Fifth Action'} 
}

出力:

First Action
Second Action
Third Action

関連する条件が入力と一致しているため、第1から第3のアクションが実行されます。 4番目と5番目の条件の正規表現とワイルドカード文字列は一致しません。

正規表現マッチングが実行されている場合、入力文字列と一致する4番目の条件もありますが、この場合は無視されます。

CaseSensitiveパラメータを使用したSwitchステートメント

-CaseSensitiveパラメータは、switch文を使用して、条件に対して大文字と小文字を正確に一致させます。

例:

switch -CaseSensitive ('Condition')
{ 
  'condition'   {'First Action'}
  'Condition'   {'Second Action'} 
  'conditioN'   {'Third Action'}  
}

出力:

Second Action

第2のアクションは、大文字と小文字の区別を考慮したときに'Condition'という文字列と完全に一致する唯一の条件であるため、実行される唯一のアクションです。

ファイルパラメータを使用したswitch文

-fileパラメータを使用すると、switch文はファイルから入力を受け取ることができます。ファイルの各行はswitch文によって評価されます。

サンプルファイルinput.txt

condition
test

switch文の例:

switch -file input.txt
{ 
  'condition' {'First Action'}
  'test'      {'Second Action'} 
  'fail'      {'Third Action'}   
}

出力:

First Action
Second Action

デフォルトの状態のシンプルなスイッチ

Defaultキーワードは、他の条件が入力値と一致しない場合にアクションを実行するために使用されます。

例:

switch('Condition')
{
  'Skip Condition'
  {
    'First Action'
  }
  'Skip This Condition Too'
  {
    'Second Action'
  }
  Default
  {
    'Default Action'
  }
}

出力:

Default Action

式を使用したステートメントの切り替え

条件は式でもあります。

$myInput = 0

switch($myInput) {
    # because the result of the expression, 4, 
    # does not equal our input this block should not be run.
    (2+2)  { 'True. 2 +2 = 4' }

    # because the result of the expression, 0, 
    # does equal our input this block should be run.
    (2-2) { 'True. 2-2 = 0' }

    # because our input is greater than -1 and is less than 1 
    # the expression evaluates to true and the block should be run.
    { $_ -gt -1 -and $_ -lt 1 } { 'True. Value is 0' }
}

#Output
True. 2-2 = 0
True. Value is 0


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow