【问题标题】:DCL symbol syntax in OpenVMSOpenVMS 中的 DCL 符号语法
【发布时间】:2011-07-04 07:42:32
【问题描述】:

我真的对 OpenVMS 的 DCL 中的一些语法感到困惑。例如,这些是一些让我感到困惑的行:

$    wo = "write sys$output"

它是否为写入 sys$output 创建了一个符号 wo

$ billing_run_number   == p1

p1 是在执行时传递给 .com 文件的参数吗?可以提供多少个参数?

$ wo "BILLING_RUN_NUMBER   = ''billing_run_number'"

''abc' 是否被符号 abc 的内容所取代?为什么是“abc”而不是“abc”?我们可以使用“”吗?

$ if ((status .nes. "P") .and. (status .nes. "M")) .or. (ftp_status .nes. "Y")

.nes. 是什么意思?平等的?我也看过.ne。 , .eqs。也。它们有什么不同?

为什么“and”和“or”被两个点包围?特定于 DCL 的语法?

如果有任何易于理解的免费在线教程会很好。谢谢大家!

【问题讨论】:

    标签: openvms dcl


    【解决方案1】:

    您可以通过http://hp.com/go/vms在线找到 VMS 文档

    您要阅读的手册是位于http://h71000.www7.hp.com/doc/731final/documentation/pdf/ovms_731_users.pdf 的 OpenVMS 用户手册(特别是第 2 章)。

    【讨论】:

      【解决方案2】:

      从内存中:$ wo = "write sys$output" 正如你所说,将 wo 指定为“write sys$output”的别名,VMS 相当于 Unix 标准输出。

      .nes. 是“不等于字符串”,而.ne. 是数字“不等于”。

      p1 是您猜到的(第一个)参数。我不记得它是从 p1 到 p9 还是更多,或者是否没有任意限制。 p0 可能是程序名称,如 Python 的 sys.argv[0]。

      一个命令过程最多接受 8 个参数,称为 P1 .. P8。

      单引号 (') 插入以下变量名,因此wo "BILLING_RUN_NUMBER = ''billing_run_number'" 将输出,例如,BILLING_RUN_NUMBER = '42',假设 p1 等于 42。我不记得 DCL 是如何知道当它做什么时像这样连续看到两个单引号...

      官方的咒语是''symbol',将实际的DCL文本替换为symbol的值

      这至少可以帮助您入门...大多数使用 VMS 的商店在 3 环活页夹中都有数百磅的文档。四处打听。

      【讨论】:

        【解决方案3】:

        p1 是传递给 .com 的参数吗 执行时的文件?多少 可以提供参数吗?

        您最多可以传递 8 个参数。每一个都定义为P1,P2...P8

        如果你需要超过8个参数,你可以使用trick like

        @my_dcl "my_p1" "my_p2" "my_p3" "my_p4" "my_p5" "my_p6" "my_p7" "my_p8 my_p9 my_p10"

        my_dcl 中,P8 将在一个字符串中包含“my_p8 my_p9 my_p10”的值。

        $ wo "BILLING_RUN_NUMBER = ''billing_run_number'"

        被内容替换为''abc' 的符号 abc?为什么是“abc” 但不是'abc'?我们可以使用“”吗?

        $ if ((status .nes. "P") .and. (status .nes。 “M”))。或。 (ftp_status .nes。 “是”)

        单引号表示翻译字符串的内容。

        所以,如果你定义wo = "write sys$output"

        你可以使用

        wo "Hello World!"
        

        'wo "Hello World!"
        

        但是如果你想显示write sys$output Hello World

        如果你尝试,

        wo "'wo Hello World!"
        

        你会得到我'wo Hello World!

        所以,你必须用单引号括起来。

        前两个是转义单引号,最后一个表示停止翻译。

        wo "''wo' Hello World!"


        像其他脚本语言一样,你可以有变量变量...

        var_hidden = "Hello world!"
        my_var = "var_hidden"
        wo 'my_var'
        

        将打印 Hello world!

        【讨论】:

          【解决方案4】:

          除了上面提到的文档之外,还可以通过 HELP HINTS、HELP :=、HELP = 和 HELP @ 命令获得大量信息。我相信 P9-P16 在 OpenVMS V8.4 中可用。

          另外,请注意全局符号(使用双等号 {== 或 :==} 定义)和局部符号(使用单个等号 {= 或 :=} 定义)之间的区别。就像在区分大小写的语言中一样,定义 A = 1 的符号与定义的 A == 1 是不同的符号,并且本地符号可以屏蔽对全局符号的引用 - READ 和 INQUIRE 等一些命令也可以创建符号,但我认为它们始终是本地符号 - 验证这一点,因为我是在记忆中工作。\

          命令 SET SYMBOL /SCOPE[={LOCAL|NOLOCAL},{GLOBAL|NOGLOBAL}) 也会影响您是否可以看到某些类型的符号。

          一般来说,尽可能使用局部符号 - 如果更高级别(调用)命令过程需要访问,或者如果您需要返回交互式 DCL 时仍定义的符号,您通常只需要全局符号 - 例外是您运行的任何专门读取或写入或创建全局符号的程序 - 很少见,但我遇到过一些。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-01
            • 1970-01-01
            • 2023-03-19
            • 2018-06-18
            • 2020-09-23
            • 2018-08-05
            相关资源
            最近更新 更多