【问题标题】:What is the proper indentation for bash scripts?bash 脚本的正确缩进是什么?
【发布时间】:2011-01-18 20:17:06
【问题描述】:

bash 脚本的正确缩进是什么?作为一个 java/c++ 猴子,我虔诚地缩进我的代码。但似乎你不能缩进这段代码:

#! /bin/bash

if [ $# = 0 ]
then
        # there was no arguments => just do to standard output.
        echo "there are no parameters"
else
cat << EOF
==========================================================
==========================================================
==========================================================
==========================================================
DESCRIPTION:

$1
----------------------------------------------------------

EOF
fi

缩进时它不识别 EOF,如果你只是取消缩进 EOF(混淆)它打印缩进。

问: bash 脚本的正确缩进是什么?

【问题讨论】:

  • 大多数具有 HEREDOC 的编程语言都存在缩进问题。这并不是 bash 所特有的。

标签: bash unix scripting indentation


【解决方案1】:

是的,您可以使用&lt;&lt;-“缩进”(请参阅​​此处文档上的 bash 手册页)

if [ $# = 0 ]
then
        # there was no arguments => just do to standard output.
        echo "there are no parameters"
else
    cat <<-EOF
    ==========================================================
    ==========================================================
    ==========================================================
    ==========================================================
    DESCRIPTION:

    $1
    ----------------------------------------------------------
    EOF
fi

【讨论】:

  • 这个有点不对,这里文档的结束标记还是不能缩进。事实上,这是我对这里文档最大的抱怨,它们只去除前导制表符(我想要 2 个空格作为缩进),而且你仍然不能缩进最终标记。
  • @haridsv 实际上你可以缩进GNU bash 4.3.11dash 0.5.7中的最后一个标记
  • 感谢@törzsmókus,不知道这个增强功能。
【解决方案2】:

使用 bash(至少 3.2)和 ksh(不了解其他),您可以使用 &lt;&lt;- 缩进此处的文档,并且前导制表符将被剥离(不是空格,只有制表符),例如

if [...]; then
    cat <<-EOF
        some text
    EOF
fi

【讨论】:

  • 另一件有用的事情是,引用起始分隔符可防止此处文档的扩展(参数、命令替换等):foo &lt;&lt; "EOF",它们可以组合:foo &lt;&lt;- "EOF"。后者对于注释掉代码块很有用(您可以使用 no-op : 作为接收命令或省略它)。此外,当使用&lt;&lt;- 时,您可以选择是否要缩进结束分隔符(或任何行,真的)。
  • 查看我对另一个答案的评论,您不能缩进此处文档的结束标记。
【解决方案3】:

Mouviciel 是正确的。

如果您想保留缩进,可以将此处的文件文本放在单独的文件中。但是,您必须自己处理替换。

【讨论】:

    【解决方案4】:

    这不是 bash 缩进问题,这是一个 here-file 问题。您在&lt;&lt; 之后指定的标签,即EOF,必须单独出现在一行中,不能有前导或尾随空格。

    对于 here-file 本身,它被用作类型,包括缩进。

    【讨论】:

    • 那里解决方案(&lt;&lt;-),查看其他答案
    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    相关资源
    最近更新 更多