简单的 bash/脚本格式化工具,用于脚本内的段落文本?

Ray*_*Ray 2 unix bash printf echo

上下文:您知道如何在文字处理器中键入句子,并且如果在段落中插入新句子或使现有句子更长或更短,则不必进行特殊格式化?

我正在写一些段落来记录给定脚本在其中的作用。我希望能够在用户使用“-help”等选项调用脚本时输出该信息,但不必每次添加句子时都必须经常调整 echo 或 printf 语句,或者使一个句子更长或更短。我怎样才能做到这一点?

我愿意使输出为 80 列或固定宽度。

编辑给读者:我发现所有答案都非常有用。

ric*_*ici 5

您可以使用广泛使用的fmt实用程序。

如果您有 Gnu coreutils(如果您使用 Linux,您几乎肯定会这样做),那么您可以使用Gnu 版本。许多 BSD 系统上都有一个非常相似的实用程序,包括 Mac OS X。

这是一个简单的示例,它应该适用于这些实现中的任何一个。请注意,第二段缩进了两个空格,并且保留了缩进:

description="\
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ornare leo non dolor porttitor
euismod. Cras
commodo, nisi vel gravida volutpat, enim turpis tempor eros, ut venenatis elit leo ut nunc. Nulla fermentum
ligula id tincidunt porttitor.

  Morbi ut massa vitae tortor rutrum
  gravida ut id nunc. Integer imperdiet pharetra augue, quis finibus justo
  luctus id. Phasellus a diam ac risus consequat pharetra. Cras
  lacinia neque
  sed ipsum euismod, non commodo felis facilisis.

Suspendisse luctus purus justo, sed iaculis lectus consequat nec. Etiam pretium ultricies
ligula, a pretium sapien facilisis eu. Nulla rhoncus viverra turpis a rutrum.
Cras eu porttitor urna. Duis nec metus vel nisi accumsan scelerisque. Cras lectus erat, mattis non mauris in, consectetur vulputate ipsum.
"
fmt -w 60 <<<"$description"
Run Code Online (Sandbox Code Playgroud)

输出:

Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Aenean ornare leo non dolor porttitor euismod. Cras
commodo, nisi vel gravida volutpat, enim turpis tempor
eros, ut venenatis elit leo ut nunc. Nulla fermentum ligula
id tincidunt porttitor.

  Morbi ut massa vitae tortor rutrum gravida ut id
  nunc. Integer imperdiet pharetra augue, quis finibus
  justo luctus id. Phasellus a diam ac risus consequat
  pharetra. Cras lacinia neque sed ipsum euismod, non
  commodo felis facilisis.

Suspendisse luctus purus justo, sed iaculis lectus
consequat nec. Etiam pretium ultricies ligula, a pretium
sapien facilisis eu. Nulla rhoncus viverra turpis a rutrum.
Cras eu porttitor urna. Duis nec metus vel nisi accumsan
scelerisque. Cras lectus erat, mattis non mauris in,
consectetur vulputate ipsum.
Run Code Online (Sandbox Code Playgroud)

将上述内容合并到脚本中。

您可以轻松地将其添加到脚本中(感谢@ninjaj 提供有关使用 tput 获得所需列宽的建议。)

#!/bin/bash
description=... # as above, not repeated for space

# Check to see if the first argument is a cry for help
if [[ $1 == -help ]]; then
  fmt -w $(tput cols) <<< "$description"
  exit 0
fi
Run Code Online (Sandbox Code Playgroud)