在不使用 echo 的情况下将子字符串分配给变量

assign substring to variable without using echo

我有一个 SNMP pass 脚本,我正在 运行ning 并且由于某种我还不明白的原因,在脚本中额外使用 echo 会导致脚本不执行。我现在的确切问题是我需要从一个变量 REQ 中取出一个子字符串,并将其分配给另一个变量。下面是一种理论上可行的方法,但由于使用 echo 而在我的情况下不起作用。

DGROUP_NODE=`echo $REQ | cut -d. -f3`

是否有另一种方法可以在不中断正在读取脚本的情况下执行此操作?我注意到 printf 也倾向于有同样的问题,虽然不那么频繁。 (这个问题还阻止我使用 echoprintf 来调试我的代码...)

备注:echo 导致脚本执行出现问题时,不会返回任何错误(关于脚本)。我只得到 No Such Instance currently exists at this OID,它告诉我脚本不是 运行,导致我的 OID 树没有被构建。

如果我 运行 SNMP 之外的脚本会按预期工作。

使用 set +x,然后再次使用 运行。我确定问题是 $RET 是空的。

从您的代码中用 $ 将 echo 括起来,如下所示:

DGROUP_NODE=$(echo $REQ | cut -d. -f3)

例如,如果我只想要 PEN:

TREE=.1.3.6.1.4.1.8072.2.255
CHOP=.1.3.6.1.4.1.
PEN=${TREE##*$CHOP} # remove $CHOP from beginning (## = longest match from beginning)
PEN=${PEN%%.*} # keep everything before first period (%% = longest match from end)

输出:

8072

更多关于此方法的信息:extract part of a string