变量分配给另一个变量后不被记住

变量分配给另一个变量后不被记住

我有从不同服务调用的 bash 脚本,虽然该调用会将两个变量传输到该 bash 脚本中。嗯,这是用相同的变量完美打印的

#!/bin/sh
template=`cat <<TEMPLATE
***** Test *****
Notification Type: $NOTIFICATIONTYPE
APP: $SERVICEDESC
Server: $HOSTALIAS
TEMPLATE
`
/usr/bin/printf "%b" "$template"

但是当我尝试通过以下方式提取变量属性时,我变得空了

#!/bin/sh
template=`cat <<TEMPLATE
***** Test *****
Notification Type: $NOTIFICATIONTYPE
APP: $SERVICEDESC
Server: $HOSTALIAS
TEMPLATE
`
echo $SERVICEDESC > /tmp/ser
echo $HOSTALIAS > /tmp/ho
SerID=$(cat /root/apps.properties | grep "^$SERVICEDESC" | cut -d'=' -f2);
HosID=$(cat /root/apps.properties | grep "^$HOSTALIAS" | cut -d'=' -f2);
echo $SerID > /tmp/serid
echo $HosID > /tmp/host
/usr/bin/printf "%b" "$template"

所有$SerID,,,$HosID这些$SERVICEDESC都是$HOSTALIAS空的。但$template打印完美。

app.properties具有以下 APP 和服务器 ID:

app1=5
server1=6
app2=6
server2=7

我将匹配来自 this 的$SERVICEDESC和,并获取号码并将其存储到和$HOSTALIASapp.properties$SerID$HosID

$SERVICEDESC或未$HOSTALIAS声明,因为这些值将由通常调用此脚本来打印输出模板的另一个服务或应用程序获取。但我需要提取这些提到的变量的值以启动另一个进程

你能帮我解决这个问题吗?

答案1

您还没有定义$SERVICEDESC$HOSTALIAS所以它们不会有任何值。

此外,您然后尝试使用它们来获取$SerID和的值$HosID,这又意味着它们不匹配任何内容。


一些评论

  1. 如果是bash脚本,则以 开头#!/bin/bash。您现在拥有的是 bourne shell 脚本 ( sh)。
  2. 用这个替换模板分配

    template="***** Test *****
    Notification Type: $NOTIFICATIONTYPE
    APP: $SERVICEDESC
    Server: $HOSTALIAS
    TEMPLATE
    "
    

相关内容