Ich muss die folgenden drei Zeilen in einem Druckbefehl drucken, ohne den Echo-Befehl zu verwenden. Also habe ich den Befehl printf gewählt. Hier sind die drei Zeilen:
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
Was ich bisher gemacht habe ist:
printf "
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
"
Aber ich habe einen Bash-Fehler für die dritte Zeile ',' bekommen.
Also wird mich jemand aufklären.
command-line
bash
Narwen
quelle
quelle
print
Befehl und demprintf
Befehl.Antworten:
Besser zu benutzen:
Sie bekommen diesen Fehler, wie andere hier gesagt haben, wegen des
%
Charakters, der speziell ist und dem man entkommen muss.Siehe
man 1 printf
für weitere Informationen.quelle
/your_string_to_search
und drücken Sie die Eingabetaste.printf
ist dieser%
Charakter und was er macht!%
ist ein Sonderzeichen inprintf
. Das ist es, was den Fehler verursacht. Sie müssen es als entkommen%%
.$
kann auch in doppelten Anführungszeichen durch die äußere Hülle ersetzt werden, daher sollten Sie es vermeiden (\$
). Es ist normalerweise einfacher, einfache Anführungszeichen zu verwenden.quelle
$variable
wird durch die Shell ersetzt, nicht durchprintf
. Wenn Sie Ihre Zeichenfolge in einfache Anführungszeichen anstatt in doppelte Anführungszeichen setzen,$
wird sie von der Shell nicht interpoliert und direkt an übergebenprintf
.$
ist oder nicht), ist es auch etwas Besonderes, wenn{
ein spezielles Parametersymbol oder eine oder mehrere Ziffern folgen . Die Grundidee von dem, was Sie sagen, ist jedoch richtig.Das %ist etwas Besonderes für printf: Es ist das führende Zeichen bei Formatspezifizierern. Wenn Sie einen wörtlichen Prozentsatz wünschen, verwenden Sie
%%
quelle
Es ist ein bisschen überraschend zu sehen, dass Sie den
echo
Befehl, den Sie gewählt haben,printf
stattdessen verwenden , wenn Sie nicht berechtigt sind, den Befehl zu verwenden .Warum nicht
cat
?quelle
$foo
im Text interpretiert werden , verwenden Siecat <<'EOF'
anstelle voncat <<EOF
.printf
ist ein formatierter Ausdruck, der als ersten Parameter eine Formatzeichenfolge verwendet. Die restlichen Parameter werden in der Formatzeichenfolge verwendet. Die drei Dinge, die Sie bei der Verwendung beachten sollten,printf
sind:Obwohl viele Sprachen
printf
Anweisungen / Befehle / Funktionen haben, unterscheiden sie sich alle ein wenig. Überprüfen Sie daher immer die Details in der sprachspezifischen Dokumentation (C, Bash, PHP, Perl usw.).Sie sollten niemals vom Benutzer bereitgestellte Informationen in der Formatzeichenfolge verwenden. Dies ist immer eine Sicherheitslücke. Wenn Sie eine vom Benutzer angegebene Zeichenfolge anzeigen möchten, verwenden Sie eine Formatzeichenfolge wie
"%s"
.Sowohl der Backslash (
\
) als auch das Prozentzeichen (%
) sind Escape-Zeichen, die die Bedeutung der folgenden Zeichen ändern. Wenn in Ihrer Ausgabe ein Escape-Zeichen angezeigt werden soll, muss es von einem anderen Parameter aus escaped oder gezogen werden. Das Dollarzeichen ($
) ist nicht speziell für printf, sondern speziell für die Shell. Achten Sie daher auf Ihre Anführungszeichen.printf
eignet sich hervorragend zum Formatieren von Zahlen. Einzelheiten finden Sie auf den Manpagesquelle
Wie bereits erwähnt, ist das
%
Symbol speziell fürprintf
.Wenn Sie eine Zeichenfolge nur so ausdrucken möchten, wie sie ist, geben Sie
printf
%s
als erstes Argument an und die in einfache Anführungszeichen eingeschlossene Zeichenfolge als zweites Argument:Die Verwendung von einfachen Anführungszeichen anstelle von doppelten Anführungszeichen verhindert, dass die Shell Symbole wie interpoliert
$
.quelle