2016-11-16 1 views
2

Ich versuche, einen Stich aus dem Befehlszeilenverlauf des Benutzers in Befehlszeilenargumente zu trennen. Zum Beispiel möchte ichTeilen einer Zeichenfolge in Befehlszeilenargumente

program argument escaped\ argument.txt -o 'another escaped.output' 

in

$v[1]: program 
$v[2]: argument 
$v[3]: escaped argument.txt 
$v[4]: -o 
$v[5]: another escaped.output 

habe ich versucht, jede einzelne mögliche Lösung spalten, die ich konnte, aber als Fisch die Variablen automatisch, keiner meiner Lösungen gearbeitet zitiert.

Danke!

+0

Sie möchten in einem 'bash' Array speichern? – Inian

+0

@Inian in einen Fisch (https://fishshell.com/) Array. – boramalper

+0

"Fisch zitiert die Variablen automatisch" - nun, nein. Es teilt es einfach nicht wieder auf. – faho

Antwort

4

Derzeit gibt es keine saubere Methode, dies in Fisch zu tun.

Das Beste, was ich tun konnte, ist ein ziemlich Hack:

set s "program argument escaped\ argument.txt -o 'another escaped.output'" 
set oldcmd (commandline) 
commandline -r -- $s 
set v (commandline -o) 
commandline -r -- $oldcmd 
printf '%s\n' $v 

dieses Puffers Verletzungen Fisch Commandline, die richtig sein Inhalt nicht tokenize.

3

Hier benötigen Sie eval.

$ set s "program argument escaped\ argument.txt -o 'another escaped.output'" 
$ eval set v $s 
$ printf "%s\n" $v 
program 
argument 
escaped argument.txt 
-o 
another escaped.output 
+1

Beachten Sie, dass _will_ alle Befehlsersetzungen und ähnliches im Argument ausführt und es keinen einfachen Weg gibt. – faho

Verwandte Themen