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

时间:2018-12-21 18:41:07

标签: shell ksh

缩进后我的代码失败。尝试了许多选择,但未获得任何满意的结果。

#!/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"的几个选项,以除去此选项卡的“ here”文档方法,但没有运气。如果我添加哈希<<#EOF,则它可以正常工作。但是,我不想使用#,因为它在shell脚本中被视为注释。

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

感谢您的建议。

2 个答案:

答案 0 :(得分:0)

将缩进的此处文档与<<-LABEL一起使用时,唯一从文档中删除的缩进及其结尾的LABEL将是实际的制表符(不是空格)。如果您缩进了空格,则外壳将很难找到终止的LABEL

答案 1 :(得分:0)

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

<< [-]单词

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

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

如果我误解我的话,请纠正我。