代码之家  ›  专栏  ›  技术社区  ›  BugShotGG

如何将CLI参数组合为perl脚本中的变量

  •  1
  • BugShotGG  · 技术社区  · 7 年前

    snmpget -v 1 -c xxxxxx-Ovq xx.xx.xx.xxx .1.3.6.1.2.1.1.8.0

    49:22:12:15.00

    #!/usr/local/bin/perl
    
    #snmpget -v 1 -c xxxxx -Ovq xx.xx.xx.xxx .1.3.6.1.2.1.1.8.0
    
    $SNMP_GET_CMD = "snmpget -v1 -c xxxxx-Ovq";
    $SNMP_TARGET = "xx.xx.xx.xxx";
    
    my $sysORLastChange = '${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0';
    chomp($sysORLastChange);
    print("${SNMP_TARGET} as an Input Line Reading of ${sysORLastChange}\n");
    

    xx.xx.xx.xxx as an Input Line Reading of ${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0

    它应该返回以下内容:

    xx.xx.xx.xxx as an Input Line Reading of 49:22:12:15.00

    我在脚本中使用的语法有什么问题吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   stevieb    7 年前

    在Perl中,使用双引号将另一个变量插入字符串。当你定义 $sysORLastChange

    my $sysORLastChange = '${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0';
    

    …正在逐字分配字符串(即,内部变量未展开)。

    my $sysORLastChange = "${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0";
    

    如果您想实际执行字符串,可以使用 qx() 运算符,也称为“backtick”样式的引号:

    my $sysORLastChange = qx(${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0);
    
    # or...
    
    my $sysORLastChange = `${SNMP_GET_CMD} ${SNMP_TARGET} .1.3.6.1.2.1.1.8.0`;
    

    看见 Perl Quote and Quote-like Operators perlop