如何在Bash中输出多行string?

如何在Bash中输出多行string,而不使用多个callback调用,如下所示:

echo "usage: up [--level <n>| -n <levels>][--help][--version]" echo echo "Report bugs to: " echo "up home page: " 

我正在寻找一个便携的方式来做到这一点,只使用Bash内置。

编辑

这是我提出的解决scheme,这是丹尼斯答案的变种。

 read -d '' help <<- EOF usage: up [--level <n>| -n <levels>][--help][--version] Report bugs to: up home page: EOF echo "$help" 

这里文件经常用于这个目的。

 cat << EOF usage: up [--level <n>| -n <levels>][--help][--version] Report bugs to: up home page: EOF 

它们在所有Bourne衍生的shell中被支持,包括所有版本的Bash。

或者你可以这样做:

 echo "usage: up [--level <n>| -n <levels>][--help][--version] Report bugs to: up home page: " 

由于我在评论中推荐了printf ,所以我应该举一些例子来说明它的用法(尽pipe打印使用信息,我更可能使用Dennis或Chris的答案)。 printfecho更复杂一些。 它的第一个参数是一个格式string,其中的转义(如\n总是被解释; 它也可以包含以%开头的格式指令,该格式指令控制其中包含任何附加参数的位置和方式。 以下是将它用于使用消息的两种不同方法:

首先,您可以将整个消息包含在格式string中:

 printf "usage: up [--level <n>| -n <levels>][--help][--version]\n\nReport bugs to: \nup home page: \n" 

请注意,与echo不同,您必须明确包含最终的换行符。 此外,如果消息恰好包含任何%字符,则必须将其写为%% 。 如果你想包括bugreport和主页地址,他们可以很自然地添加:

 printf "usage: up [--level <n>| -n <levels>][--help][--version]\n\nReport bugs to: %s\nup home page: %s\n" "$bugreport" "$homepage" 

其次,你可以使用格式化string,使其在单独的行上打印每个额外的参数:

 printf "%s\n" "usage: up [--level <n>| -n <levels>][--help][--version]" "" "Report bugs to: " "up home page: " 

有了这个选项,添加bugreport和主页地址是相当明显的:

 printf "%s\n" "usage: up [--level <n>| -n <levels>][--help][--version]" "" "Report bugs to: $bugreport" "up home page: $homepage" 

使用-e选项,那么你可以在string中用\n打印新的行字符。

样品 (但不知道是否一个好的一个)

有趣的是, -e选项在MacOS的手册页中没有logging,但仍然可用。 它被logging在Linux的手册页中 。