• Linux Shell编程(6)——变量替换


    变量的名字是它的值保存的地方。引用它的值称为变量替换。


    $
    让我们仔细地区别变量和变量的值。如果variable1是一个变量的名字,那么$variable1就是引用这个变量的值――即这个变量它包含的数据。如果只有变量名出现(即指没有前缀$),那就可能是在1)声明一个变量或是在给这个变量赋值。2)声明废弃这个变量,3)导出(exported)变量,4)或是在变量指示的是一种信号的特殊情况。(参考例子 29-5)。变量赋值可以使用等于号(=),比如:var1=27。也可在read命令和在一个循环的情况下赋值,比如:for var2 in 1 2 3。


    在一个双引号(" ")里的变量引用不会禁止变量替换。所以双引号被称为部分引用,有时也称为"弱引用"。而在一个单引号里(' ')的变量替换是被禁止的,变量名只被解释为普通的字面意思。所以单引号被称为"全局引用",有时也被称为强引用。从第五章可得到更多的细节讨论。.


    注意$variable实际上只是${variable}的简单的简写形式。在某些场合使用$variable形式会引起错误,这时你可能需要使用${variable}的形式了。


    例子变量赋值与替换


    #!/bin/bash
    
    
    # Variables: 赋值和替换
    
    
    a=375
    hello=$a
    
    
    #-------------------------------------------------------------------------
    # =号的左右两边都不能有空白符.
    # 如果有一个空白符会怎么样?
    
    
    #  如果用 "VARIABLE =value",
    #              ^
    #+ 脚本会以为"VARIABLE"是一个命令并且此命令带了一个参数"=value"。
    
    
    #  如果用 "VARIABLE= value",
    #                 ^
    #+ 脚本会以为"value"是一个命令,
    #+ 并且把环境变量"VARIABLE"赋为空值:""。
    #-------------------------------------------------------------------------
    
    
    
    
    echo hello    # 没有引用变量,只是输出字符串 "hello".
    
    
    echo $hello
    echo ${hello} # 这句和上面的一句一样
    
    
    echo "$hello"
    echo "${hello}"
    
    
    echo
    
    
    hello="A B  C   D"
    echo $hello   # A B C D
    echo "$hello" # A B  C   D
    # 正如你所看到的:echo $hello和echo "$hello"产生不同的输出。
    #                                  ^      ^
    # 把变量引起来会保留空白字符.
    
    
    echo
    
    
    echo '$hello'  # $hello
    #    ^      ^
    #  在单引号中的变量引用会被禁止,
    #+ 字符"$"会仅仅被认为是一个普通的字符,而不是变量的前缀.
    
    
    # 注意不同引用的不同效果.
    
    
    
    
    hello=    # Setting it to a null value.
    echo "$hello (null value) = $hello"
    #  注意具有null值的变量不等同于废弃(unset)此变量
    #+ 虽然最后的结果都是一样的(看下面的).
    
    
    # --------------------------------------------------------------
    
    
    #  在同一行里用空白字符隔开为多个变量赋值是可以的。
    #
    #  警告:这可能减少可读性,并且可能是不可移植的。
    
    
    var1=21  var2=22  var3=$V3
    echo
    echo "var1=$var1   var2=$var2   var3=$var3"
    
    
    # 在老版本的sh中这可能会引起问题
    
    
    # --------------------------------------------------------------
    
    
    echo; echo
    
    
    numbers="one two three"
    #           ^   ^
    other_numbers="1 2 3"
    #               ^ ^
    #  如果给变量赋的值中有空白字符,引号是必须的。
    #
    echo "numbers = $numbers"
    echo "other_numbers = $other_numbers"   # other_numbers = 1 2 3
    echo
    
    
    echo "uninitialized_variable = $uninitialized_variable"
    # 未初始化的变量具有null值 (即是没有值).
    uninitialized_variable=   #  声明,但没有初始化它 --
                              #+ 这就好像上面一样给它设置一个null 值
    echo "uninitialized_variable = $uninitialized_variable"
                              # 它仍然是null值.
    
    
    uninitialized_variable=23       # 赋值
    unset uninitialized_variable    # 销毁变量.
    echo "uninitialized_variable = $uninitialized_variable"
                                    # 结果仍然是null值.
    echo
    
    
    exit 0


  • 相关阅读:
    第18课 类型萃取(2)_获取返回值类型的traits
    第17课 类型萃取(1)_基本的type_traits
    【ASP.NET MVC系列】浅谈数据注解和验证
    【ASP.NET MVC系列】浅谈NuGet在VS中的运用
    【ASP.NET MVC系列】浅谈ASP.NET MVC 视图
    【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程
    【Java系列】Eclipse与Tomcat
    【java系列】java开发环境搭建
    【设计模式篇】工厂模式
    【架构篇】OCP和依赖注入
  • 原文地址:https://www.cnblogs.com/new0801/p/6176873.html
Copyright © 2020-2023  润新知