Frage

Was ist denn hier los?

printf.sh:

#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" $NAME

Befehlszeilensitzung:

$ ./printf.sh
Hello, George
Hello, W.
Hello, Bush

AKTUALISIEREN: printf "Hello, %s\n" "$NAME" funktioniert.Aus dem Grund, warum ich es nicht benutze echo, halten

echo.sh:

#! /bin/sh
FILE="C:\tmp"
echo "Filename: $FILE"

Befehlszeile:

$ ./echo.sh
Filename: C:    mp

Der POSIX-Spezifikation für echo sagt: „Neue Anwendungen werden zur Nutzung ermutigt.“ printf anstatt echo" (aus diesem und anderen Gründen).

War es hilfreich?

Lösung

Ihre NAME-Variable wird wie folgt ersetzt:

printf "Hello, %s\n" George W. Bush

Benutze das:

#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" "$NAME"

Andere Tipps

Gibt es einen bestimmten Grund, warum Sie printf verwenden, oder würde Echo auch für Sie funktionieren?

NAME="George W. Bush"
echo "Hello, "$NAME

ergibt

Hello, George W. Bush

bearbeiten:Der Grund dafür ist die Wiederholung von „George W.Bush“ liegt daran, dass die Bourne-Shell durch Leerzeichen begrenzt ist.Um printf weiterhin verwenden zu können, müssen Sie $NAME in doppelte Anführungszeichen setzen

printf "Hello, %s\n" "$NAME"

Die Art und Weise, wie ich das interpretiere Manpage Betrachtet es die Zeichenfolge, die Sie ihm übergeben, als Argument?Wenn Ihre Zeichenfolge Leerzeichen enthält, wird davon ausgegangen, dass Sie mehrere Argumente übergeben.Ich glaube, dass ColinYounger Recht hat, wenn er die Variable in Anführungszeichen setzt, was die Shell dazu zwingt, die Zeichenfolge als einzelnes Argument zu interpretieren.

Eine Alternative könnte darin bestehen, printf die Variable erweitern zu lassen:

printf "Hello, $NAME."

Die Links gelten für Bash, aber ich bin mir ziemlich sicher, dass das Gleiche auch für Sh gilt.

Wenn Sie möchten, dass alle diese Wörter einzeln ausgedruckt werden, verwenden Sie drucken anstatt printf

printf übernimmt die Formatierungsspezifikation und wendet sie auf jedes Argument an, das Sie übergeben.Da Sie drei Argumente {George, W., Bush} haben, wird die Zeichenfolge dreimal mit den verschiedenen Argumenten ausgegeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top