Pregunta

¿Que está pasando aqui?

printf.sh:

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

Sesión de línea de comando:

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

ACTUALIZAR: printf "Hello, %s\n" "$NAME" obras.Por qué no estoy usando echo, considerar

eco.sh:

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

Línea de comando:

$ ./echo.sh
Filename: C:    mp

El especificación POSIX para echo dice: "Se anima a las nuevas aplicaciones a utilizar printf en lugar de echo" (por esta y otras razones).

¿Fue útil?

Solución

Su variable NOMBRE se sustituye así:

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

Utilizar esta:

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

Otros consejos

¿Hay alguna razón específica por la que estás usando printf o echo también funcionaría para ti?

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

resultados en

Hello, George W. Bush

editar:La razón por la que se repite sobre "George W.Bush" se debe a que el shell bourne está delimitado por un espacio.Para seguir usando printf tienes que poner $NAME entre comillas dobles

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

La forma en que interpreto el página de manual ¿Considera que la cadena que le pasa es un argumento?si su cadena tiene espacios, cree que está pasando varios argumentos.Creo que ColinYounger tiene razón al rodear la variable entre comillas, lo que obliga al shell a interpretar la cadena como un argumento único.

Una alternativa podría ser dejar que printf expanda la variable:

printf "Hello, $NAME."

Los enlaces son para bash, pero estoy bastante seguro de que lo mismo ocurre con sh.

Si desea que todas esas palabras se impriman solas, utilice imprimir en lugar de imprimirf

imprimirf toma la especificación de formato y la aplica a cada argumento que pasa.Como tiene tres argumentos {George, W., Bush}, genera la cadena tres veces usando los diferentes argumentos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top