Ich benutze MSYS, um etwas Anschein von einer vernünftigen skriptfähigen Shell unter Windows zu bekommen :).C# Befehlszeilenargumente und ls
Jetzt schreibe ich eine Konsolenanwendung, geschrieben in C#, die eine Reihe von Argumenten akzeptiert und diese als Optionen dem Benutzer in einem Dialogfeld präsentiert. Die tatsächlichen Optionen entsprechen den Dateinamen, die ich mit ls abrufe.
Problem erscheint jedoch, wenn ich Dateinamen mit Leerzeichen in ihnen habe. Lassen Sie uns sagen, ich habe Dateien mit dem Namen:
file name
with spaces
In einem Verzeichnis namens foo, meine C# ausführbare Datei ist bar genannt, und im Inneren ich den Inhalt des „argv“ Array untersuchen (dh übergeben die Befehlszeilenargumente zu meinem Anwendung, wie von .NET interpretiert).
Die folgende Fremdheit passiert, wenn ich es nennen:
./bar.exe "Dateiname" "mit Leerzeichen" ->
file name
with spaces
./bar.exe $ (ls foo) ->
file
name
with
spaces
./bar.exe $ (ls -Q foo) ->
"file
name"
"with
spaces"
Weiß jemand, was hier passiert? Offensichtlich analysiert .NET die Argumente nicht, die entweder von bash oder ls korrekt übergeben werden.
Aber selbst wenn ich Anführungszeichen hinzufüge, sind die Anführungszeichen in den Argumenten enthalten, anstatt zwei Argumente zu einer zu kombinieren.
Gibt es sogar eine Möglichkeit für mich, die unverarbeitete Befehlszeile zu öffnen, damit ich sehen kann, ob Funksprüche mit Steuerzeichen oder etwas passieren?
Jeder Einblick würde sehr geschätzt werden!
@Rahil dass bearbeiten besser ist die Post nicht machen sind vorbei. Benutzer: Sie scheinen die Frage nicht verstanden zu haben. – CodeCaster
@CodeCaster Ich war mir nicht sicher über die 'device' Klasseninstanz. –
Ich meinte die Leerzeichen ändern, und das gleiche gilt für @ Lorenzo Edit. Die Formatierung dieses Beitrags ist in Ordnung, wie er ist, er wird nicht lesbarer, wenn er zufällige Zeilenumbrüche einfügt. – CodeCaster