当前位置 主页 > 服务器问题 > Linux/apache问题 >

    linux中$符号的基础用法总结

    栏目:Linux/apache问题 时间:2019-11-12 16:24

    linux使用版本: CentOS 7

    [root@azfdbdfsdf230lqdg1ba91 ~]# cat /etc/redhat-release
    CentOS Linux release 7.4.1708 (Core)
    [root@azfdbdfsdf230lqdg1ba91 ~]# uname -a
    Linux azfdbdfsdf230lqdg1ba91 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    [root@azfdbdfsdf230lqdg1ba91 ~]#

    $符号草集

    目标

    $符号在linux系统的有着很多很重要的作用,特别是在编写bash脚本的时候,随处可见$的身影。由于他的千变万化,多种多样,使对他的掌握和使用,尤其是记忆带来了挑战,所以,现在,我们来一起将它的用法做一次汇总,形成草集。掌握他们不会让你工资大涨,因为面试不会问到,但是会提高你的工作效率,扩展你的视野

    目前,我所知道的$用法有$、"$"、$0 $1 $n、$#、$@ $*、$?、$()、${}、${#}、$[]、$-、$!、$$。额外!$,!!,依次详说

    $ 获取变量值

    $可获取变量的值

    [root@izbp10lqlgy2g31s41bt94z ~]# a=1
    [root@izbp10lqlgy2g31s41bt94z ~]# echo $a
    1

    "$" 获取变量值时最好使用"括起来

    为什么有这个建议呢,看实例

    [root@izbp10lqlgy2g31s41bt94z ~]# echo get value of a = $a
    get value of a = 1
    [root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = $a"
    get value of a = 1

    可以看到,有无"双引号括起来似乎效果是一样的。别早下结论,往下看

    [root@izbp10lqlgy2g31s41bt94z ~]# a="i am skyler"
    [root@izbp10lqlgy2g31s41bt94z ~]# [ $a == "i am skyler" ]
    -bash: [: 参数太多

    这里解析下[],[]是条件判断符号,相当于test命令。他的意思是判断a变量的值是否等于"i am skyler"。
    那么为什么会报错呢,因为[ $a == "i am skyler"]这种写法变量解析后成为[ i am skyler == "i am skyler" ],很明显,这个判断式无法判断等号两边的字符串,我们想要的是[ "i am skyler" == "i am skyler" ]的比较。所以平时我们在是name"

    [root@izbp10lqlgy2g31s41bt94z ~]# [ "$a" == "i am skyler" ]
    [root@izbp10lqlgy2g31s41bt94z ~]# echo $?
    0

    使用双引号后就可以了,这里提前用了下$?,他的意思是判断前一个命令执行结果是否正确。输出的结果中,0表示执行成功,非零值表示出错

    ${}用于区分变量的边界,明确告诉程序要取哪个变量的值

    如下实例,不加{}程序无法判断ab $abc哪个是变量,无法解析

    [root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = $abc"
    get value of a =
    [root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = ${a}bc"
    get value of a = 1bc
    [root@izbp10lqlgy2g31s41bt94z ~]#

    ${#}获取变量值的长度

    [root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}"
    get length of a = 1
    [root@izbp10lqlgy2g31s41bt94z ~]# a=11111
    [root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}"
    get length of a = 5
    [root@izbp10lqlgy2g31s41bt94z ~]# a=skyler
    [root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}"
    get length of a = 6
    [root@izbp10lqlgy2g31s41bt94z ~]#