Forums: 一般話題(質疑・要望等) (Thread #41521)

質問:grepのコマンドラインオプションでダブルクォーテーションで囲う文字列をPowerShellから渡せないことについて (2019-12-08 11:44 by daidai0123 #83941)

サクラエディタのgrepを自動で行なおうとしている時によく分からなかったことがあり、もし可能でしたらご教示をお願い致します。
以下のようにダブルクォーテーションで囲った文字列をgrepしたい場合、コマンドプロンプトとPowerShellで結果が異なりました。

sakura.exe -GREPMODE -GKEY=""memory"" -GFILE="*.*" -GFOLDER="D:\TEMP_USER_D\sakura_src2-3-2-0" -GCODE=99 -GOPT=SP1
コマンドプロンプトでは"memory" (ダブルクォーテーション付き)でgrepされる。
PowerShellでは、memory (ダブルクォーテーションなし)でgrepされる。

sakura.exe -GREPMODE -GKEY="memory" -GFILE="*.*" -GFOLDER="D:\TEMP_USER_D\sakura_src2-3-2-0" -GCODE=99 -GOPT=SP1
コマンドプロンプトでもPowerShellでも、memory(ダブルクォーテーションなし)でgrepされる。

PowerShell側でダブルクォーテーションのエスケープや、ダブルクォーテーションをシングルクォーテーションで囲っても
PowerShellからではmemory (ダブルクォーテーションなし)でgrepしてしまいます。
sakura.exe -GREPMODE -GKEY="`"memory`"" -GFILE="*.*" -GFOLDER="D:\TEMP_USER_D\sakura_src2-3-2-0" -GCODE=99 -GOPT=SP1
sakura.exe -GREPMODE -GKEY='"memory"' -GFILE="*.*" -GFOLDER="D:\TEMP_USER_D\sakura_src2-3-2-0" -GCODE=99 -GOPT=SP1

PowerShell側の問題かもしれないのですが、もしダブルクォーテーションで囲った文字列をPowerShellからgrepする方法が既にありましたら
ご教示を頂ければ幸いです。

各バージョンについては
サクラエディタ:Ver. 2.3.2.0
コマンドプロンプト:Version 10.0.18362.476
PowerShell:バージョン5.1.18362.145、6.2.3の2つで確認しております。

そしてgrep対象のD:\TEMP_USER_D\sakura_src2-3-2-0は、sourceforgeからダウンロードした以下のファイルを解凍したものを使用しました。
https://sourceforge.net/projects/sakura-editor/files/sakura2/2.3.2.0/
sakura_src2-3-2-0.tar.gz

Reply to #83941×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 質問:grepのコマンドラインオプションでダブルクォーテーションで囲う文字列をPowerShellから渡せないことについて (2019-12-12 11:54 by sakai-memoru #83964)


> sakura.exe -GREPMODE -GKEY=""memory"" -GFILE="*.*" -GFOLDER="D:\TEMP_USER_D\sakura_src2-3-2-0" -GCODE=99 -GOPT=SP1
> コマンドプロンプトでは"memory" (ダブルクォーテーション付き)でgrepされる。
> PowerShellでは、memory (ダブルクォーテーションなし)でgrepされる。
>
ダブルクォーテーションではなく、シングルで囲う手はありそうです。

sakura.exe -GREPMODE -GKEY='""memory""' -GFILE="*.*" -GFOLDER="D:\TEMP_USER_D\sakura_src2-3-2-0" -GCODE=99 -GOPT=SP1
Reply to #83941

Reply to #83964×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 質問:grepのコマンドラインオプションでダブルクォーテーションで囲う文字列をPowerShellから渡せないことについて (2019-12-15 20:23 by daidai0123 #83979)

メッセージ #83964 への返信
> ダブルクォーテーションではなく、シングルで囲う手はありそうです。
> sakura.exe -GREPMODE -GKEY='""memory""' -GFILE="*.*" -GFOLDER="D:\TEMP_USER_D\sakura_src2-3-2-0" -GCODE=99 -GOPT=SP1

ご返信ありがとうございます。ご記載の方法で行うと、確かにダブルクォーテーション付きでgrepできました。
ただそれを元に-GKEYに渡す文字列を変えつつ連続してgrepしようとしたところ、
シングルクォーテーションで変数を囲うと変数名が値にならず文字列のままになりました。

そしてまた試行したところ、どうやらps1ファイルにスクリプトとして記載するとダブルクォーテーションのエスケープが効くようです。
下記のように書けば、変数$lが""で囲われているなら囲われたまま、囲っていないなら囲っていないままでgrepすることが出来ました。
確認不足で申し訳ありません。
foreach ($l in $f) {
& $SKRset.Path -GREPMODE -GKEY="`"$l`"" -GFILE="$File" -GFOLDER="$Folder" -GCODE="$Code" -GOPT="$Opt" | Out-File -Append -Encoding default $Out
}
$SKRset.Pathはsakura.exeのフルパス、その他の$付き記述はリストから読み込んだ変数を格納しております。

どうしてPowerShellのコンソールに直接入力した場合に、ダブルクォーテーションのエスケープが効かなかったかは
不明なままで釈然としませんが、一先ず意図することはできました。この度はご返信ありがとうございました。
Reply to #83964

Reply to #83979×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: 質問:grepのコマンドラインオプションでダブルクォーテーションで囲う文字列をPowerShellから渡せないことについて (2019-12-15 20:39 by daidai0123 #83980)

一部誤りがあったのですが、PowerShellのコンソールからでも下記のようにエスケープすればダブルクォーテーション付きでgrepできたので、コンソールからはエスケープが効かないわけではありませんでした。失礼いたしました。
sakura.exe -GREPMODE -GKEY="`"`"memory`"`"" -GFILE="*.*" -GFOLDER="D:\TEMP_USER_D\sakura_src2-3-2-0" -GCODE=99 -GOPT=SP1
Reply to #83979

Reply to #83980×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login