如何在Bash中输出多行字符串?

26 浏览
0 Comments

如何在Bash中输出多行字符串?

如何在Bash中输出多行字符串而不使用多个echo调用,像这样:

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

我正在寻找一种便携的方法来做到这一点,只使用Bash内建命令。

0
0 Comments

在Bash中如何输出多行字符串?

有人在这篇问答页面上的答案的启发下,我创建了一种混合方法,我认为这是最简单和更灵活的方法。你觉得怎么样?

首先,我将用法定义为一个变量,这样我就可以在不同的上下文中重复使用它。格式非常简单,几乎是所见即所得,不需要添加任何控制字符。在我看来,这似乎是可移植的(我在MacOS和Ubuntu上运行它)。

__usage="
Usage: $(basename $0) [OPTIONS]
Options:
  -l, --level               Something something something level
  -n, --nnnnn          Something something something n
  -h, --help                   Something something something help
  -v, --version                Something something something version
"

然后,我可以简单地使用它:

echo "$__usage"

甚至更好的是,在解析参数时,我可以在一行代码中直接将其打印出来:

levelN=${2:?"--level: n is required!" "$__usage"}

这在一个脚本中对我起作用,而上述答案则不起作用(没有修改的情况下)。

这比涉及大量的字符(如\t和\n)要干净得多,这些字符很难在文本中找到并扩展,从而使输出与脚本中的字符串大不相同。

由于某些原因,它对我来说会将所有内容打印在同一行上 :/

如果你使用了这个解决方案,并发现所有内容都在同一行上,请确保用引号括住变量:

echo $__usage

将会在一行上打印所有内容,而

echo "$__usage"

将会保留换行符。

在我的情况下,使用双引号

echo "$__usage"

是必需的。

echo $__usage

不起作用。

这实际上是对我起作用的唯一解决方案。Printf做了很多事情,对于我的多行xml,它可能需要很多转义,因为它完全搞乱了内容。我将foo赋值为cat < && echo "$foo"。

0
0 Comments

问题:如何在Bash中输出多行字符串?

出现的原因:在Bash中,输出多行字符串可能会遇到一些问题。如果直接使用echo命令,每个换行符将被解释为一个新的命令,导致输出不符合预期。因此,需要找到一种方法来正确输出多行字符串。

解决方法:可以使用以下方法来输出多行字符串。

1. 使用双引号和换行符:可以使用双引号将多行字符串括起来,并在每行末尾添加一个换行符。例如:

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

这种方法适用于大多数情况,甚至适用于Bourne shell(如Dash和Heirloom Bourne Shell)。

2. 使用单引号和换行符:如果不希望字符串中的内容被解释,可以使用单引号将多行字符串括起来。例如:

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

使用单引号将字符串括起来可以防止字符串中的特殊字符被解释。

需要注意的是,如果需要在输出中保留字符串中的变量或命令替换符号(如$和`),应该使用单引号而不是双引号。

以上是在Bash中输出多行字符串的两种常用方法。无论是使用双引号还是单引号,都可以正确输出多行字符串。

0
0 Comments

如何在Bash中输出多行字符串?

在Bash中,可以使用Here documents来实现这个目的。它们在所有Bourne衍生的shell中都受支持,包括所有版本的Bash。下面是一个使用Here documents输出多行字符串的示例:

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

这段代码将输出一个包含多行字符串的文本块。

除了使用Here documents外,还可以使用其他方法将多行字符串输出到Bash中。例如,可以使用`read -d ''`命令将多行字符串读入变量中,然后使用`echo`命令输出结果。

如果需要将Here documents保存到变量中,也是可以实现的。只需将Here documents的内容赋值给一个变量即可。

如果在多行字符串中需要转义反引号等特殊字符,可以在Here documents的第一行使用双引号将定界符括起来。

以上是关于如何在Bash中输出多行字符串的一些方法。希望对你有所帮助!

0