私はMSYSを使用して、Windowsで適切なスクリプト可能なシェルのいくつかの類似点を取得しています:)。
ここで、C#で記述されたコンソールアプリケーションを作成しています。このアプリケーションは、多数の引数を受け入れ、それらをオプションとしてダイアログボックスに表示します。実際のオプションは、lsで取得しているファイル名に対応しています。
ただし、スペースを含むファイル名を使用すると問題が発生します。次の名前のファイルがあるとします。
file name
with spaces
fooというディレクトリでは、C#実行可能ファイルはbarと呼ばれ、その中で "argv"配列の内容(つまり、.NETによって解釈されるようにアプリケーションに渡されるコマンドライン引数)を検査します。
私がそれを呼ぶとき、次の奇妙さが起こります:
./bar.exe"ファイル名""スペースあり"->
file name
with spaces
./bar.exe $(ls foo)->
file
name
with
spaces
./bar.exe $(ls -Q foo)->
"file
name"
"with
spaces"
ここで何が起こっているのか誰か知っていますか?どうやら、.NETはbashまたはlsのいずれかによって渡された引数を正しく解析していません。
しかし、引用符を追加しても、2つの引数を1つに結合するのではなく、引用符が引数に含まれます。
未処理のコマンドラインにアクセスする方法もあるので、制御文字などでファンキーさが発生しているかどうかを確認できますか?
どんな洞察も大歓迎です!