为什么我的脚本在缩进后会失败?

Why does my script fail after indentation?

我的代码在缩进后失败了。尝试了很多选择,但没有得到任何令人满意的结果。

#!/bin/ksh

typeset -i destCount=1
dbRole="PHYSICAL STANDBY"
RMANPGM=cat
policy="CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;"

if [[ ${destCount} -gt 0 ]] || [[ "${dbRole}" == "PHYSICAL STANDBY" ]]; then
    if [[ "${policy}" == "CONFIGURE ARCHIVELOG DELETION POLICY TO NONE;" ]]; then
        ${RMANPGM}<<-EOF
        run{
        CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;
        }
        exit
        EOF
     fi
else
    echo "Assuming archive deletion policy set as appropriate..."
fi

尝试了 "<<-EOF" 的几个选项来删除作为此处文档方法的选项卡,但没有成功。如果我添加散列 <<#EOF 然后它工作。但是,我不想使用 #,因为它被视为 shell 脚本中的注释。

我们还有其他方法可以 运行 缩进后的命令吗?

感谢您的建议。

当使用带有 <<-LABEL 的缩进文档时,将从文档中删除的唯一缩进及其终止 LABEL 将是实际的制表符(而不是空格)。如果您使用空格缩进,shell 将很难找到终止符 LABEL

关于散列 [#],它可以按照“man ksh”在 here-doc 中使用。

<<[-]字数

shell 输入被读取到与 word 相同的行,在删除任何引号后,或者到文件结尾。不对word进行参数替换、命令替换、算术替换或文件名生成。生成的文档称为 here-document,成为标准输入。如果引用了单词的任何字符,则不会对文档的字符进行任何解释;否则,会出现参数扩展、命令替换和算术替换,\new-line 被忽略,并且必须使用 \ 来引用字符 \、$、`。如果 - 附加到 <<,则所有前导制表符都将从 word 和文档中删除。如果将 # 附加到 <<,则前导空格和制表符将从文档的第一行去除,并且从剩余行和 word 去除等效缩进。为了确定缩进,假定每 8 列出现一个制表位。

我比较了 ksh88 和 ksh93,看起来像 ksh93 中引入的“<<#”的用法。

如果我误解了,请纠正我。