Question

Que se passe t-il ici?

printf.sh :

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

Session en ligne de commande :

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

MISE À JOUR: printf "Hello, %s\n" "$NAME" travaux.Pourquoi je n'utilise pas echo, considérer

echo.sh :

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

Ligne de commande:

$ ./echo.sh
Filename: C:    mp

Le Spécification POSIX pour echo dit : "Les nouvelles applications sont encouragées à utiliser printf au lieu de echo" (pour cela et d'autres raisons).

Était-ce utile?

La solution

Votre variable NAME est remplacée comme ceci :

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

Utilisez ceci:

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

Autres conseils

y a-t-il une raison spécifique pour laquelle vous utilisez printf ou echo fonctionnerait-il également pour vous ?

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

résulte en

Hello, George W. Bush

modifier:La raison pour laquelle il répète "George W.Bush" est dû au fait que le Bourne Shell est délimité par des espaces.Pour continuer à utiliser printf, vous devez mettre $NAME entre guillemets doubles

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

La façon dont j'interprète le page de manuel est-ce qu'il considère la chaîne que vous lui transmettez comme un argument ;si votre chaîne contient des espaces, elle pense que vous transmettez plusieurs arguments.Je pense que ColinYounger a raison d'entourer la variable de guillemets, ce qui oblige le shell à interpréter la chaîne comme un argument unique.

Une alternative pourrait être de laisser printf développer la variable :

printf "Hello, $NAME."

Les liens sont pour bash, mais je suis presque sûr qu'il en va de même pour sh.

Si vous souhaitez que tous ces mots soient imprimés seuls, utilisez imprimer au lieu de imprimer

imprimer prend la spécification de formatage et l'applique à chaque argument que vous transmettez.Puisque vous avez trois arguments {George, W., Bush}, il affiche la chaîne trois fois en utilisant les différents arguments.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top