如何在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的答案)。 printf
比echo
更复杂一些。 它的第一个参数是一个格式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的手册页中 。