回答編集履歴
4
PowerShellでの変数解釈ルール説明を加え、全面改訂
test
CHANGED
@@ -1,11 +1,29 @@
|
|
1
|
-
PowerShell
|
1
|
+
```PowerShell
|
2
2
|
|
3
|
-
|
3
|
+
-Path $_temp.txt
|
4
4
|
|
5
|
+
```
|
5
6
|
|
7
|
+
では _temp という名前の変数の値を探しに行ってしまいます。
|
8
|
+
|
9
|
+
PowerShellでは空白文字や.,などの英単語の区切文字までは同一単語と見做すからです。
|
10
|
+
|
11
|
+
回避方法はhichonさんの回答のように変数名を{}で囲み
|
6
12
|
|
7
13
|
```PowerShell
|
8
14
|
|
9
|
-
|
15
|
+
-Path ${_}_temp.txt
|
10
16
|
|
11
17
|
```
|
18
|
+
|
19
|
+
とするか、横着せずに、型変換し文字列結合演算子を用い
|
20
|
+
|
21
|
+
```PowerShell
|
22
|
+
|
23
|
+
-Path ([string]$_ + '_item.txt')}
|
24
|
+
|
25
|
+
```
|
26
|
+
|
27
|
+
と書くかです。
|
28
|
+
|
29
|
+
なお変数名の{}囲みは本来は記号やスペースを含むような特殊な変数名を定義するための機能です
|
3
}ヌケを補填
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
PowerShellでは $_ がパイプラインで受け渡される自動変数となります。
|
2
2
|
|
3
|
-
1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType() で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
|
3
|
+
1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType()} で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
|
4
4
|
|
5
5
|
|
6
6
|
|
2
回答を修正
test
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
+
PowerShellでは $_ がパイプラインで受け渡される自動変数となります。
|
2
|
+
|
3
|
+
1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType() で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
|
4
|
+
|
5
|
+
|
6
|
+
|
1
7
|
```PowerShell
|
2
8
|
|
3
|
-
1..10 | ForEach-Object {New-Item -Path ($_ + 'item.txt')}
|
9
|
+
1..10 | ForEach-Object {New-Item -Path ([string]$_ + '_item.txt')}
|
4
10
|
|
5
11
|
```
|
1
コードスニペットに置き換え
test
CHANGED
@@ -1 +1,5 @@
|
|
1
|
+
```PowerShell
|
2
|
+
|
1
3
|
1..10 | ForEach-Object {New-Item -Path ($_ + 'item.txt')}
|
4
|
+
|
5
|
+
```
|