zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    CF1454F Array Partition
    leetcode1883 准时抵达会议现场的最小跳过休息次数
    leetcode1871 跳跃游戏 VII
    leetcode1872 石子游戏VIII
    CF1355C Count Triangles
    CF1245D Shichikuji and Power Grid
    CF1368C Even Picture
    CF1368D AND, OR and square sum
    CF1395C Boboniu and Bit Operations
    SpringBoot和开发热部署
  • 原文地址:https://www.cnblogs.com/new0801/p/6176873.html
Copyright © 2011-2022 走看看