¿Qué está pasando aquí?¿Por qué Bourne shell printf itera sobre un argumento% s?
printf.sh: sesión de línea de
#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" $NAME
Comando:
$ ./printf.sh
Hello, George
Hello, W.
Hello, Bush
ACTUALIZACIÓN: printf "Hello, %s\n" "$NAME"
obras. Por qué no estoy usando echo
, considere
echo.sh:
#! /bin/sh
FILE="C:\tmp"
echo "Filename: $FILE"
de línea de comandos:
$ ./echo.sh
Filename: C: mp
El POSIX spec for echo
dice: "Se anima a nuevas aplicaciones para usar en lugar de printf
echo
"(por esta y otras razones).
bash builtin echo no reemplaza \ de manera predeterminada, pero el shell POSIX (por ejemplo, dash) echo lo hace, como indica su enlace a la especificación.Ya que está usando un shell de todos modos, puede simplemente imprimir "Hello, $ NAME \ n" –
En realidad, usar% s es probablemente un buen hábito, por razones de seguridad y corrección. printf hará \ reemplazo y otras cosas en la cadena de formato, así que mantenga las variables fuera de este cuando sea posible. –