コマンドバッファスタック(2)

コマンドバッファスタックで掲載した Set-CommandBufferStack.ps1 ですが、コマンドラインに引用符が含まれる場合に期待した動作にならないことがわかりました。修正して再掲載します。

ダウンロード

以下のスクリプトは修正済みです。

問題点

修正前のスクリプトは、次のように動作します。

キーボードから以下のように入力します。

PS> "abc"#

TAB を押してスタックにプッシュ

PS> "abc"

ESC を押してクリアし、 # を入力

PS> #

TAB を押してスタックからポップ

PS> "abc

このように、最後のダブルクォートが外れてしまいます。PowerShell の仕様で、わざわざ最後のダブルクォートを外す仕組みになっているのです。これは、最後にダブルクォートを追加して値を返すことですぐに修正できるのですが、シングルクォートの場合はもっと複雑です。

PS> 'abc' 'def'#

TAB を押してスタックにプッシュ

PS> ‘abc’ ‘def’

ESC を押してクリアし、 # を入力

PS> #

TAB を押してスタックからポップ

PS> ”abc” ”def

最後の引用符が外れてしまうのはダブルクォートと同じですが、それに加えてすべてのシングルクォートが二重になってしまいます。これはタブ補完を使っている限り修正できません。

修正後の動作

仕方がないので、シングルクォートが含まれている場合に限り、もう 1 ステップ加えることにしました。新しいスクリプトでは、次のように動作します。

PS> 'abc' 'def'#

TAB を押してスタックにプッシュ

PS> ‘abc’ ‘def’

ESC を押してクリアし、 # を入力

PS> #

TAB を押すと、次のようなコマンドが出てくるので

PS> Get-CommandBufferStack

Enter を押してポップ

PS> ‘abc’ ‘def’

コマンドバッファスタック(2)」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です