?
コマンドラインからいくつかのパラメータを取得し、URLパラメータを含むURL(たとえば、埋め込みや埋め込みなど&
)に入力するBash関数を作成しようとしています。
URLにパラメータが1つしかない場合、&
問題はありません。つまり、次の関数を定義すると:
test() {
cmd.exe /c start https://example.com/\?foo=$1
}
で呼び出すと、test bar
私のブラウザでURLが開きますhttps://example.com/?foo=bar
。これは完全に正確です。
問題は、2番目のURLパラメータを追加しようとしたときです。その後、次のように機能を拡張しました。
test() {
cmd.exe /c start https://example.com/\?foo=$1\&baz=$2
}
ただし、()で呼び出されたときにtest bar qux
以前と同じURLをブラウザで開くと、https://example.com/?foo=bar
端末にエラーが表示されます。'baz' is not recognized as an internal or external command, operable program or batch file.
URLを二重引用符で囲むことも役に立ちません。
test() {
cmd.exe /c start "https://example.com/\?foo=$1\&baz=$2"
}
URLは開かれますhttps://example.com//?foo=bar"
が、まだエラーが発生します。'baz' is not recognized as an internal or external command, operable program or batch file.
答え1
cmd.exe
コマンドで呼び出されるのでcmd.exe
エスケープ構文&
エスケープする必要がある^&
(そして?
エスケープする必要はありません)Bashエスケープ構文の代わりに使用する必要があります。以下は期待どおりに機能します。
test() {
cmd.exe /c start "https://example.com/?foo=$1^&baz=$2"
}
(参考までに、これは'baz' is not recognized as an internal or external command, operable program or batch file.
Windowsのcmd.exe
概念であるバッチファイルを意味します。)