質問: ### 前提・実現したいこと 環境 Windows7 Microsoft Windows [Version 6.1.7601] GNU sed version 4.2.1 for内で、echoなどでダブルクォーテーションなどの文字列を含んだものの実行結果を sedに渡して処理したい。 ### 発生している問題・エラーメッセージ ### 該当のソースコード ``` for /f "usebackq tokens=*" %%a in (`echo a^"bc^| sed -e s/b//g`) do ( echo %%a ) 出力「a"bc| sed -e s/b//g」 希望出力「a"c」//「b」を空文字列に置き換える。 ``` ### 試したこと echo、sedをシングルクォートで囲ったり、「^」や「\」でエスケープなど組み合わせたのですが、どれも希望する動作を実現できませんでした。
回答: バッククォート内は、サブプロセスのcmd.exeが出来てそれが解釈実行します。その際に`"`が生で効きます。 つまり、サブプロセスのcmd.exeは、`echo a"bc | sed -e s/b//g`を実行しますので、お書きの結果になります。 サブプロセスに`^"`を渡してやればいいので、`^`と`"`をそれぞれ`^`でクォートします。 ``` for /f "usebackq tokens=*" %%a in (`echo a^^^"bc^| sed -e s/b//g`) do ( ```