Domanda

Che cosa sta succedendo qui?

printf.sh:

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

Sessione di linea di comando:

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

AGGIORNAMENTO: printf "Hello, %s\n" "$NAME" opere.Perché io non lo uso echo, prendere in considerazione

echo.sh:

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

Riga di comando:

$ ./echo.sh
Filename: C:    mp

Il POSIX spec per echo dice: "le Nuove applicazioni sono incoraggiati ad utilizzare printf invece di echo"(per questo e per altri motivi).

È stato utile?

Soluzione

Il tuo NOME variabile viene sostituito come questo:

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

Uso questo:

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

Altri suggerimenti

c'è un motivo specifico che si sta utilizzando printf o avrebbe fatto eco il lavoro per voi?

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

risultati in

Hello, George W. Bush

edit:Il motivo è l'iterazione su "George W.Bush" è perché la shell bourne è spazio delimitted.Per continuare a utilizzare printf devi mettere $NOME tra virgolette doppie

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

Il modo di interpretare i pagina man si ritiene che la stringa si passa da un argomento;se la stringa ha spazi si pensa che si sta passando più argomenti.Credo ColinYounger è corretto, circondando l'variabile tra virgolette, che impone la shell di interpretare la stringa come un unico argomento.

Un'alternativa potrebbe essere quella di lasciare printf espandere la variabile:

printf "Hello, $NAME."

I link sono per bash, ma sono abbastanza sicuro che lo stesso vale per i pesci.

Se si desidera che tutte quelle parole per essere stampato in proprio, utilizzare stampa invece di printf

printf prende la formattazione specifica e si applica ad ogni argomento che si passa.Dal momento che si dispone di tre argomenti, {George W. Bush}, restituisce la stringa di tre volte, usando i vari argomenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top