So erhalten Sie Leerzeichen in Bash-Argumenten

4604
François ッ Vespa ت

Ich benutze den Befehl:

cm1 cm2 arg1 arg2 'argument 3' 

Es geht zuerst an cm1, die dann arg1 arg2 'argument 3'zu einer anderen Datei umgeleitet wird.

/usr/bin/cm1:

#! /bin/bash # some script here shift cm2 $@ 

/usr/bin/cm2:

echo $# # This returns 4 in lieu of 3 because the white space in 'argument 3' causes the argument to be split into two arguments. 

Wie kann ich also Argumente von einem Skript an ein anderes übergeben und sicherstellen, dass Leerzeichen nicht als Trennzeichen für Argumente gelesen werden?

2

1 Antwort auf die Frage

3
Der Hochstapler

Ich nehme an, Sie müssen es wie folgt in Anführungszeichen einpacken:

#! /bin/bash # some script here shift cm2 "$@" 
Vielen Dank! Es funktioniert nach dem einfachen Beispiel, das ich gegeben habe. Nun, bei dem eigentlichen Skript, das ich codiere, und das komplexere Umleitungen hat, werden die Argumente irgendwann gebrochen. Das bedeutet aber, dass der Fehler von woanders kommt ... Danke! François ッ Vespa ت vor 12 Jahren 0
Es kann sein, dass Sie diese Argumente später basierend auf dem Standard-IFS aufteilen, dessen Standardwert "" Cougar vor 12 Jahren 0
Ich suchte nach gegenteiligem Verhalten - wie man mein Skript zwingt, Argumente mit Leerzeichen zu durchlaufen. In meinem Skript hatte ich reference ("$ @") zitiert, sodass alle Argumente als eine verkettete Zeichenfolge behandelt wurden. Ich ersetzte:> für Pfad in "$ @" <mit:> für Pfad in $ @ <und es hat funktioniert. Vielen Dank. mombip vor 5 Jahren 0