我可以像在C中一样在shell中连接2个字符串吗?

时间:2012-11-20 06:15:40

标签: shell

我正在编写一个脚本,它应该提供一个选项-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,似乎无法做到。

还有其他建议吗?

3 个答案:

答案 0 :(得分:2)

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

方法1:使用单引号而不是双引号将您想要在多行上分隔的字符串括起来:

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

输出:

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

<强>解释

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

  • 不会被bash扩展(因此您无法使用$var内的变量)
  • 按字面解释为echo(包括转义字符,除非您使用echo -e

方法2 - 针对方法中的缩进使用进行了更新:如果您只有1个长字符串,您希望在代码中分成多行以提高可读性,则可以使用double带有\表示法的引号:

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脚本中一行的最后一个字符时,表示line continuation(即将其视为“嘿!这个当前命令会有更多内容,不要直到你读完所有内容之后才执行它!“)


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

答案 1 :(得分:1)

有一个丑陋的黑客攻击(假设你的shell是/ bin / sh):

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

应该可以做得更好......

编辑:使用echo代替'而不是猫',抱歉有误导性答案。

答案 2 :(得分: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"
}
相关问题