0

我正在编写一个应该提供-h帮助选项的脚本,当我尝试编写帮助消息时,我想让它看起来更体面,如下所示:

print_help()
{
    printf "Usage: 
            ./prog -v version
                   -h help
                   -x ...."
}

当我运行脚本时,应该会在我编写它时打印帮助消息,如下所示:

Usage: 
./prog -v version
       -h help
       -x ....

在 C 中,我可以将 2 个字符串连接成两行,如下所示:

printf("Usage:\n"
       "./prog -v version\n"
       "       -h help\n"
       "       -x ....\n");

这两行将连接在一起,然后打印出来。

我想在 shell 中做几乎相同的事情,我试过了printfecho似乎做不到。

还有什么建议吗?

4

3 回答 3

2

我可以想到两种方法来做到这一点

方法1:将要分隔的字符串用单引号而不是双引号括在多行中:

echo 'Usage: 
./prog -v version
       -h help
       -x ....'

输出:

Usage: 
./prog -v version
       -h help
       -x ....

解释:

请注意,单引号内的所有内容:

  • 不会被扩展bash(所以不能使用$varinside 等变量)
  • 由字面解释echo(包括转义字符,除非您使用echo -e

方法 2 - 为方法内的缩进使用而更新:如果您只有 1 个长字符串,您想在代码中分解成多行以获得更好的可读性,您可以使用带有\符号的双引号:

print_help() {
{
    echo \
    "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"\
    "sed do eiusmod tempor incididunt ut labore et dolore magna"\
    "aliqua. Ut enim ad minim veniam, quis nostrud exercitation"\
    "ullamco laboris nisi ut aliquip ex ea commodo consequat."\
    "Duis aute irure dolor in reprehenderit in voluptate velit"
}

print_help

输出:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit

解释:

\字符在 shell 脚本中用作行的最后一个字符时,表示行继续(即认为它是“嘿!这个当前命令还有更多内容,在你阅读完所有内容之前不要执行它!”)


就个人而言,我更喜欢第二条路线,因为您可以使用echo -e和转义字符 ( \n) 来更细粒度地控制输出的确切内容 =)

于 2012-11-20T06:35:46.340 回答
1

cat 有一个丑陋的 hack(假设你的 shell 是 /bin/sh):

cat <<EOS
./prog -v version
  -h help
  -x ....
EOS

应该可以做得更好...

编辑:使用带有'...'的回声而不是猫,抱歉误导性的答案。

于 2012-11-20T06:35:16.240 回答
0

这是另外两种方法;

用于echo -e解释换行符并使用换行符\n连接它们\

echo -e "Usage:\n" \
"./prog -v version\n" \
"       -h help\n" \
"       -x ...."

使用 sed 打印来自匿名Here-Document的帮助

#!/bin/bash
:<<-PRINT_HELP_DOC
Usage: 
    ./prog -v version
        -h help
        -x ....
PRINT_HELP_DOC

print_help()
{
    # print lines 3 to 6
    sed -n '3,6p' "$0"
}
于 2012-11-21T06:53:42.290 回答