为什么Bourne shell printf迭代%s参数?

Chr*_*way 7 unix shell

这里发生了什么?

printf.sh:

#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" $NAME
Run Code Online (Sandbox Code Playgroud)

命令行会话:

$ ./printf.sh
Hello, George
Hello, W.
Hello, Bush
Run Code Online (Sandbox Code Playgroud)

更新:printf "Hello, %s\n" "$NAME"有效.为什么我没有使用echo,请考虑

echo.sh:

#! /bin/sh
FILE="C:\tmp"
echo "Filename: $FILE"
Run Code Online (Sandbox Code Playgroud)

命令行:

$ ./echo.sh
Filename: C:    mp
Run Code Online (Sandbox Code Playgroud)

POSIX规范的echo说,"我们鼓励新的应用程序使用printf,而不是echo"(这和其他原因).

Col*_*ger 7

您的NAME变量将被替换为:

printf "Hello, %s\n" George W. Bush
Run Code Online (Sandbox Code Playgroud)

用这个:

#! /bin/sh
NAME="George W. Bush"
printf "Hello, %s\n" "$NAME"
Run Code Online (Sandbox Code Playgroud)