Siv*_*ari 10 bash shell-script
我有一个简单的 shell 函数调用,我正在使用echo
和printf
命令来打印我传递的参数。我注意到以下几点:
echo
正在打印输出printf
不打印输出 我在这里错过了什么吗?
check_host(){
# prints output
echo $1
# does not print the output
printf $1
}
check_host $(hostname)
Run Code Online (Sandbox Code Playgroud)
ilk*_*chu 13
您显示的函数将打印第一个参数两次,一次附加换行符,第二次输出的末尾没有换行符。
例如,在交互式 Bash shell 中,你会得到这样的东西
user@foo /tmp$ check_host foo
foo
foouser@foo /tmp$
Run Code Online (Sandbox Code Playgroud)
输出printf
就在那里,只是不在自己的一行上。
之间的区别echo
,并printf
是echo
打印在最后一个换行,即使你不问它(您可以防止在Bash中使用echo -n
),以及printf
作品更像是printf()
在C函数,因为它只打印你的要求。您必须\n
在printf
格式字符串中显式使用以获取换行符。
请注意,一般而言,您需要引用这些变量和命令替换,以防止出现分词问题。这可能不是主机名的问题,但如果您有带有空格的值,您将需要它。
所以:
check_host() {
echo "$1"
printf "%s\n" "$1"
}
check_host "$(hostname)"
Run Code Online (Sandbox Code Playgroud)
printf
也应该通过%s
上面的格式说明符来打印任意数据。否则%
数据中的任何符号都会被 解释printf
。
另请参阅:为什么 printf 比 echo 好?