在 bash 函数调用中使用“echo”和“printf”

在 bash 函数调用中使用“echo”和“printf”

我有一个简单的 shell 函数调用,我正在使用echoprintf命令来打印我传递的参数。我注意到以下几点:

  1. echo正在打印输出
  2. printf不打印输出

我在这里错过了什么吗?

check_host(){
    # prints output
    echo $1

    # does not print the output
    printf $1

    }
check_host $(hostname)

答案1

您显示的函数将打印第一个参数两次,一次附加换行符,一次打印没有换行符在第二个输出的末尾。

例如,在交互式 Bash shell 中,您会得到类似这样的内容

user@foo /tmp$ check_host foo
foo
foouser@foo /tmp$ 

输出来自printf 在那里,只是不在一条线上。

echo和之间的区别在于,printf即使echo您没有要求,也会在末尾打印换行符(您可以在 Bash 中使用 来阻止这种情况echo -n),并且printf工作方式更像printf()C 中的函数,因为它只打印您要求的内容。您必须\nprintf格式字符串中显式使用才能获取换行符。

请注意,一般来说,您需要引用这些变量和命令替换,以防止出现分词问题。这可能不是主机名的问题,但如果您的值带有空格,则需要它。

所以:

check_host() {
    echo "$1"
    printf "%s\n" "$1"
}
check_host "$(hostname)"

打印任意数据printf也应该通过上面的格式说明符来完成%s。否则%数据中的任何符号都将由 解释printf

另请参阅:为什么 printf 比 echo 更好?

相关内容