Javaアプリケーションにいくつかの引数を渡そうとしていますが、引数を区切るために空白だけに依存しないインテリジェントなパーサーを使用して、自分でそれらを解析したいと思います。例:
/ update source = foo func =(bar、foo、foo、bar)
これはすべて、すべてをトークンに変換してからそれらを解析することでうまく機能します。ただし、次を追加すると問題が発生します。
path = "./ foo / bar / foo bar.txt"
(fooとbarの間の二重スペースに注意してください)。
二重引用符を使用すると、引数は単一の文字列として渡され、二重スペースが保持されます。引用符は次のように削除されます。
path = ./ foo / bar / foo bar.txt
これにより、パーサーが失敗します。しかし、'のように引用符として使用する他の文字を使用しようとすると、パーサーは正常に機能しますが、シェルは文字列を2つの別々の文字列として渡し、二重スペースで区切られるため、そこに2つのスペースがあったという情報が失われます。
リテラル文字列表現を保持するだけでなく、ユーザーが「'string'」のような奇妙な構造を入力しなくても、文字列が引用されたという情報を保持するために二重引用符を使用して引数を渡すにはどうすればよいですか?私はJavaを使用していますが、引数の行全体をシェルによって解析されないようにする方法はありますか?または、引用符を削除せずに?
ところで、私はこれをマイクロソフトのコマンドラインから実行しましたが、UNIXシェルをまだ試していません。これは、インターウェブで読んだものからの一重引用符でさえ失敗する可能性があります