2

Powershell タブ展開関数は、これまでの行と「現在の単語」の 2 つのパラメーターを取ります。関数は、現在の単語の置換を返す必要があります。

実験から、現在の単語が引用符なしで関数に渡され、返された単語が元と同じ引用符で行に挿入されるように思えます。たとえば、次のように入力すると

PS> foo "bar"<TAB>

タブ展開関数に (引用符なしで) 渡された文字列を取得しbar、返された値を二重引用符で囲んで行に戻します。

この動作は、場合によっては問題を引き起こします。たとえば、ファイル名の部分的な補完では、C:\Pro<TAB>get"C:\Program Files"と入力する場合がありますが、さらに展開するには最後の引用符を削除する必要があります (たとえば、入力\Microしてから TAB をもう一度押すなど)。

また、引用符を含む展開された値を返すのは非常に面倒です:

PS> function TabExpansion($line, $lastword) {
PS>    "looks like '" + $lastword + "' when quoted"
PS> }
PS>
PS> Silly 'example'<TAB>

これにより、不均衡な引用符が発生します。

この動作を回避または回避する方法はありますか?

ポール。

4

1 に答える 1

1

まず、これは真実ではありません。

この動作により、特定の場合に問題が発生します。たとえば、ファイル名の部分的な補完。C:\ Proと入力して「C:\ ProgramFiles」を取得しますが、最後の引用符を削除してさらに展開する必要があります(たとえば、\ Microと入力し、Tabキーを押します)。また。

見積もりの​​後に\Microと入力し続けると、自動的に処理されます。

本当に引用符を含む値を返す必要がある場合は、文字列にエスケープ文字( `)を挿入できます。エスケープ文字自体をエスケープして、食べられないようにする必要があることに注意してください。

function TabExpansion($line, $lastword){
    "looks like ``'" + $lastword + "``' when quoted"
}

タブを展開すると、例は次のようになります。

Silly "looks like `'example`' when quoted"

パーサーは問題ないはずです。

于 2010-10-05T18:19:09.427 に答える