[解決済み] PowerShellの文字列補間構文
2022-03-04 02:42:36
質問
私はいつも以下の構文を使って、文字列の中で変数が展開されていることを確認していました。
"my string with a $($variable)"
最近、次のような構文に出くわした。
"my string with a ${variable}"
同等ですか?何か違いがありますか?
解決方法は?
補完するために marszeさんの回答 :
${...}
(で変数名を囲む)。
{
と
}
) は確かに
常に
が含まれている場合、その変数名には
特殊文字
のような
スペース
.
または
-
.
-
ない
特別なものは
_
と - です。 驚くほど、問題なく -?
. -
注
:
は 必ず を終了させると解釈されます。 ドライブ参照 のコンテキストでは 名前空間変数表記法 とは関係なく{...}
の囲みが使用されているか、または必要である(例えば、次のような場合)。$env:USERNAME
または${env:USERNAME}
,env
は PowerShellドライブ すべての環境変数を表す)。
のコンテキストでは
文字列展開
(補間)内部
"..."
がある場合、そこには
別の
理由
使用
${...}
たとえ変数名自体にそれが必要ないとしても。
が必要な場合
に続く空白以外の文字と変数名を区別するためです。
特に
:
:
$foo = 'bar' # example variable
# INCORRECT: PowerShell assumes that the variable name is 'foobarian', not 'foo'
PS> "A $foobarian."
A . # Variable $foobarian doesn't exist -> reference expanded to empty string.
# CORRECT: Use {...} to delineate the variable name:
PS> "A ${foo}barian."
A barbarian.
# INCORRECT: PowerShell assumes that 'foo:' is a *namespace* (drive) reference
# (such as 'env:' in $env:PATH) and FAILS:
PS> "$foo: bar"
Variable reference is not valid. ':' was not followed by a valid variable name character.
Consider using ${} to delimit the name.
# CORRECT: Use {...} to delineate the variable name:
PS> "${foo}: bar"
bar: bar
参照 この回答 は、PowerShell の文字列展開ルールの包括的な概要を説明しています。
注意点 の場合、同じテクニックが必要です。 暗黙のうちに を渡すという文脈で適用されます。 非クオート引数 コマンドに ;例:
# INCORRECT: The argument is treated as if it were enclosed in "...",
# so the same rules apply.
Write-Output $foo:/bar
# CORRECT
Write-Output ${foo}:/bar
最後に、やや不明瞭な代替案として
`
-の一部でない文字に対してのみ、期待通りに動作するという問題があります。
エスケープシーケンス
(参照
about_Special_Characters
):
# OK: because `: is not an escape sequence.
PS> "$foo`: bar"
bar: bar
# NOT OK, because `b is the escape sequence for a backspace character.
PS> "$foo`bar"
baar # The `b "ate" the trailing 'r' of the variable value
# and only "ar" was the literal part.
関連
-
[解決済み] PowerShellでSharePoint 2013の連絡先リストに項目を作成する方法は?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] インストールされたPowerShellのバージョンを確認する
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] YAML の文字列を複数行に渡って分割するには?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] PowerShellでコードをコメントアウトする方法とは?
-
[解決済み] JavaScriptで文字列補間を行うにはどうすればよいですか?
-
[解決済み] コンストラクタのコロンメンバー(" : ")の変な構文は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Powershell: 引数 "xxx" を受け入れる位置パラメーターが見つからない。
-
[解決済み] OutVariableを使用してArrayListを作成する
-
[解決済み] Get-ADUserとフィルタを含むForEach-Objectループ
-
[解決済み] PowerShellで"%"(パーセント)は何をするのですか?
-
[解決済み] "get-wmiobject win32_process -computername" でエラー "Access denied , code 0x80070005" が発生する。
-
[解決済み] Powershell - 空のパイプ要素は許可されません。
-
[解決済み] PowerShellで環境変数をコンソールに出力する方法は?
-
[解決済み] PowerShellでディレクトリを変更する
-
[解決済み] Powershell New-ScheduledTaskTrigger -RepetitionIntervalを使った反復タスクの実行
-
[解決済み] PowerShellの複数行コメント