bash字符串中的shell变量扩展

时间:2019-04-03 09:18:21

标签: bash

为什么下面的脚本为shell变量打印为空 预期的输出是“ encapsulated-options 10.1.42.35:4334”,但输出“ encapsulated-options:;”。 。请指教。

#!/bin/bash                                                                    
cem_ip=""                                                                      
cem_port=""                                                                    
DHCPDCONF="encapsulated-options \"$cem_ip:$cem_port\";";                       

function print()                                                               
{                                                                              
    cem_ip="10.1.42.35";                                                       
    cem_port=4334;                                                             
    echo -e "$DHCPDCONF"                                                       
    return 0;                                                                  
}                                                                              

print;            

1 个答案:

答案 0 :(得分:0)

您似乎将bash变量视为可以通过引用传递的对象。但这不是那样。

在将变量cem_ipcem_port连接到字符串并将其保存到变量时 DHCPDCONF。这些var的值(空字符串)在那时被照原样使用。

DHCPDCONF变量现在只是一个字符串,并且不知道它是由其他两个变量组成的。 当您以后更改cem_*变量的值时,DHCPDCONF的值不会改变

#!/bin/bash
cem_ip="";
cem_port="";

function encapsulated_options () {
    echo "encapsulated-options \"${1}:${2}\";";
}

function print () {
    cem_ip="1.2.3.4";
    cem_port="5678";
    DHCPDCONF=$(encapsulated_options "${cem_ip}" "${cem_port}");
    echo -e $DHCPDCONF;
}

print;