私はこれで少し迷っています。何らかの理由で、powershell の replace 関数は、$ 記号で終わる変数ではうまく機能しません。
指示:
$var='A#$A#$'
$line=('$var='+"'"+"'")
$line -replace '^.+$',('$line='+"'"+$var+"'")
期待される出力:
$line='A#$A#$'
実際の出力:
$line='A#$A#
私はこれで少し迷っています。何らかの理由で、powershell の replace 関数は、$ 記号で終わる変数ではうまく機能しません。
指示:
$var='A#$A#$'
$line=('$var='+"'"+"'")
$line -replace '^.+$',('$line='+"'"+$var+"'")
期待される出力:
$line='A#$A#$'
実際の出力:
$line='A#$A#
望ましくない正規表現の置換でヒットしているようです。regex 特殊変数$'
は、一致後のすべてを表します。正規表現は文字列全体と一致するため、$'
実質的に空です。置換操作中に、.Net 正規表現エンジンは$'
期待される出力を認識し、その空の文字列を置き換えます。
$
これを回避する 1 つの方法は、$var
文字列内の のすべてのインスタンスを に置き換えることです$$
。
$line -replace '^.+$',('$line='+"'"+($var.Replace('$','$$'))+"'")
.Net での正規表現置換の詳細については、次を参照してください。
I don't really understand the purpose of your posted lines, it seems to me that it would just make more sense to do $line='$line='''+$var+"'"
, BUT if you insist on your way, just do two replace calls, like this:
$line -replace '^.+$',('$line=''LOL''') -replace 'LOL',$var
$ を特殊文字に置き換え、変更後に元に戻すことで、ある種のバンドエイドを見つけることができました。キーボードにキーがない文字を選択することをお勧めします。私は「¤」を選びました。
$var='A#$A#$'
$var=$var -replace '\$','¤'
$line=("`$var=''")
$line -replace '^.+$',("`$line='$var'") -replace '¤','$'