3

私はこれで少し迷っています。何らかの理由で、powershell の replace 関数は、$ 記号で終わる変数ではうまく機能しません。

指示:

$var='A#$A#$'
$line=('$var='+"'"+"'")
$line -replace '^.+$',('$line='+"'"+$var+"'")

期待される出力:

$line='A#$A#$'

実際の出力:

$line='A#$A#
4

3 に答える 3

4

望ましくない正規表現の置換でヒットしているようです。regex 特殊変数$'は、一致後のすべてを表します。正規表現は文字列全体と一致するため、$'実質的に空です。置換操作中に、.Net 正規表現エンジンは$'期待される出力を認識し、その空の文字列を置き換えます。

$これを回避する 1 つの方法は、$var文字列内の のすべてのインスタンスを に置き換えることです$$

$line -replace '^.+$',('$line='+"'"+($var.Replace('$','$$'))+"'")

.Net での正規表現置換の詳細については、次を参照してください。

置換

于 2012-08-31T15:52:06.917 に答える
0

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

于 2012-08-31T17:39:07.780 に答える
0

$ を特殊文字に置き換え、変更後に元に戻すことで、ある種のバンドエイドを見つけることができました。キーボードにキーがない文字を選択することをお勧めします。私は「¤」を選びました。

$var='A#$A#$'
$var=$var -replace '\$','¤'
$line=("`$var=''")
$line -replace '^.+$',("`$line='$var'") -replace '¤','$'
于 2012-08-31T16:52:34.087 に答える