2017-04-19 2 views
0

Ich habe ein Bash-Skript, das mehrere Befehlszeilenargumente ($ 1, $ 2, ... usw.) akzeptiert. Das Programm, das das Skript startet, besteht aus Gründen, auf die ich hier nicht näher eingehen werde, indem es die Befehlszeilenargumente als eine Zeichenfolge übergibt, die das Bash-Skript als $ 1 interpretiert. Diese eine Zeichenfolge enthält Leerzeichen zwischen den gewünschten Argumenten, aber bash interpretiert sie immer noch als einzelnes Befehlszeilenargument. Gibt es eine Möglichkeit, Bash zu sagen, dass es sein Befehlszeilenargument mit einem Leerzeichen als Trennzeichen analysieren soll?Wie teilt man einem Bash-Skript mit, ein einzelnes Befehlszeilenargument zu analysieren, das Leerzeichen enthält?

Zum Beispiel, wenn argstring = 50 graphite downtick ich bash will $1=50$2=graphite$3=downtick, um zu sehen, statt $1=50 graphite downtick

+0

Zitieren Sie nicht die Erweiterung, und es wird Wortspaltung erhalten (aber es wird auf jeden Platz aufgeteilt, was auch nicht das sein könnte, was Sie wollen. Und achten Sie auf Globs.) – rici

+0

@rici Ich verstehe nicht was Sie meinen mit "zitieren Sie die Erweiterung nicht." –

+0

Wenn Sie $ 1 verwenden. Vermutlich benutzt du es irgendwo. Wenn Sie es in Positionsparameter aufteilen möchten, können Sie 'set - $ 1' verwenden. Wenn Sie es als drei Wörter an einen anderen Befehl übergeben möchten: 'other_cmd $ 1'. Solange du die Erweiterung nicht zitierst ('" $ 1 "'), wird sie geteilt. + Aber es ist eine suboptimale Möglichkeit, mehrere Argumente zu übergeben.) – rici

Antwort

1

Gerade diese Zeile hinzufügen, an der Spitze des Programms:

set -- $1 

Weitere Daten zu set in the bash reference manual und ein anderes Beispiel seiner Verwendung in this Stack Overflow answer. Im Grunde kann es verwendet werden, um die Argumente zu ersetzen, die an Ihr Skript übergeben werden.

+0

Perfekt. Total gearbeitet. Ich habe etwas Neues gelernt. –

Verwandte Themen