• 【001】变量知多少


    1. 变量

    Shell脚步中的变量可以分为“系统环境变量”和“用户自定义变量”两种。系统环境变量用来记录特定的系统信息,比如系统名称、用户、用户名、用户系统ID(UID)等。此外,系统环境变量还被用来存储有关Shell回话和工作环境的信息,环境变量可以分为“全局变量”、“局部变量”。

    1.1 全局变量

    • 全局变量
      全局环境变量对于Linux上的所有Shell回话和子Shell都是可见的。使用env或是printenv命令可以查看当前Linux环境上面所有的全局变量。
      在这里插入图片描述
      上面截图中“等号(=)”前面的变量就是“系统环境全局变量”。要引入某个环境变量,需要在变量名前面添加“$(美元符)”。比如引用“JAVA_HOME”,可以直接在终端使用echo命令来输出,如:
      在这里插入图片描述
      注意:系统环境变量基本上都是用大小字母,以区分用户自定义的环境变量。

    1.2 局部变量

    • 局部变量
      局部环境变量只能是在定义它们的子Shell终端环境中可见。当前UNIX环境中没有单独查看句柄环境变量的命令,但是可以借助set命令来查看,然后和env/printenv命令得到的结果进行比对得知。因为set命令会显示特定进程中的所有环境变量,比如局部变量、全局变量和用户自定义变量(而且会对结果安装字母顺序进行排序);而env/printenv不会输出局部变量和用户自定义变量,此外,还不会对结果进行排序。
      在这里插入图片描述

    2. 定义变量

    用户变量可以是“任何由字母(azAZ)、数字(09)或下划线(_)组成的文本字符串”。

    比如下面的变量名是有效的:

    #!/bin/bash
    
    var="1"
    _VAr="2"
    VAR_1="3"
    VAR_="4"
    
    echo "$var $_VAr $VAR_1 $VAR_"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    其打印结果如下图所:

    在这里插入图片描述

    而下面的这些变量名是无效的:

    #!/bin/bash
    
    2VAR="1"
    -var="2"
    !var="3"
    
    echo ${2VAR} ${-var} ${!var}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如下图所示:

    在这里插入图片描述

    不能使用其他字符(如!*- )的原因是,这些字符对Shell有特殊的含义。

    要定义一个变量,其格式如下:

    //var、=和value直接没有空格符号
    var=value
    
    • 1
    • 2

    Shell对变量是区分大小的,比如varVar是两个不同的变量,比如:
    在这里插入图片描述
    在Shell脚步中,变量是没有数据类型概念的。直接定义一个变量名就可以,比如定义一个变量var,其值是一个字符串“Hello World.”,直接这样定义:

    #!/bin/sh
    var="Hello World."
    
    • 1
    • 2

    需要注意的是:变量名、等号和值之间是没有空格的。如果在等号前加上了空格,则var会被当成单独的命令:
    在这里插入图片描述
    如果在等号后面加上等号,则“Hello World.”会被认为是一个单独的命令:
    在这里插入图片描述

    2.1 使用变量

    使用一个已定义的变量,直接在变量名前面添加“$”符号就可以,如下所示:

    #!/bin/sh
    var="Hello World."
    echo ${var}
    
    • 1
    • 2
    • 3

    如下图所示:
    在这里插入图片描述

    2.2 双引号

    定义变量的时候,变量名什么时候需要双引号?它和单引号之间又有什么区别?本节将揭晓答案。
    如果变量值(value)不包含任何空白字符(比如空格),则不需要双引号/单引号。比如:
    在这里插入图片描述
    但是如果value包含空格,则必须使用双引号/单引号括起来。如下:
    在这里插入图片描述
    我们可以在echoprintf命令的双引号中引用变量值。比如:
    在这里插入图片描述

    使用双引号可饮用除字符$、反引号(`)、反斜线(\)外的任意字符或字符串。双引号不会阻止Shell对这3个字符作特殊处理(标示变量名、命令替换、反斜线转义)。

    在这里插入图片描述

    2.3 单引号

    2.2节中可以看到,当value中有空格时候,变量值可以使用双引号或单引号,但是这两者在某些情况下会有所差异。

    引用变量时,通常建议用双引号将其名称括起来。这可以防止重新解释引用字符串中的所有特殊字符——除了$、` (反引号)和 (转义)。 在双引号中保留$作为特殊字符允许引用带引号的变量 ( “$variable” ),也就是说,用变量的值替换变量。

    使用双引号来防止分词。 用双引号括起来的参数将其自身显示为一个单词,即使它包含空格分隔符。

    #!/bin/sh
    var_1="test"
    var_2='just a ${var_1}'
    echo ${var_2}
    
    var_3="hahaha"
    echo '${var_2}\t${var_3}'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如下图所示:
    在这里插入图片描述

    单引号(' ')的操作类似于双引号(" "),但不允许引用变量,因为$的特殊含义被关闭了。在单引号中,除'以外的每个特殊字符都按字面意思解释。考虑单引号(“完整引用”)比双引号(“部分引用”)更严格的引用方法。

    因为即使转义字符(\)也会在单引号中得到字面解释,所以试图将单引号括在单引号中不会产生预期的结果。

    2.4 反引号(`)

    反引号(` ,切换到拼音模式,ESC键下方按键)允许您将shell 命令的输出分配给变量。必须用反引号字符包围整个命令行命令:

    // 7.sh
    #!/bin/bash
    
    date=`date`
    echo "${date}"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    变量date接受date命令的输出。

    在这里插入图片描述
    注意:在Shell中,还可以使用$(...)语法代替反引号 (`),这具有可重入的优点。

    2.5 只读变量

    Shell提供了一种使用read-only命令将变量标记为只读的方法。当变量被标记为只读后,它的值将不能被修改。

    如下所示:

    #!/bin/bash
    
    readonly name="lixiaogang"
    echo ${name}
    
    # 尝试对变量name的值进行修改,会收到报错提示信息
    name="Kawhi Anthony Leonard"
    echo ${name}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    附:sh-x参数可以调试打印Shell脚本的执行过程,调试必备选项参数。

    在这里插入图片描述

    2.6 删除变量

    Shell脚本支持删除一个已定义的变量的值,称为“删除变量(或取消设置)”,该功能由unset命令完成,其使用方式如下:

    unset variable_name
    
    • 1

    如下所示:

    #!/bin/bash
    
    name="lixiaogang"
    echo ${name}
    
    unset name
    echo ${name}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    当使用unset命令取消name的值后,再次打印该变量的值时,其结果为空。

    在这里插入图片描述

    unset不能删除声明为readonly的变量。

    #!/bin/bash
    
    readonly var="123"
    echo ${var}
    usnet var
    
    • 1
    • 2
    • 3
    • 4
    • 5

    var是一个readonly的变量,无法进行删除。

    在这里插入图片描述

    2.7 反斜线(\)

    如果下一个字符有特殊含义,反斜线(\)可以屏蔽其特殊含义。下述字符包含有特殊意义:

    &	*	+	^	$	`	"	|	?
    
    • 1

    示例代码:
    在这里插入图片描述

    3. 使用变量

    Shell脚本中使用一个已定义的变量,有下面三种方法:

    • 使用双引号引用变量
    "$var"
    
    • 1
    • 大括号引用变量
    ${var}
    
    • 1
    • 直接引用变量
    $var
    
    • 1

    3. 总结

    本文详细讲解了Shell脚本中变量相关的知识,从变量的分类,再到变量相关的定义、引用、删除等概念。通过本文的学习,能够完全掌握Shell脚本中的变量知识。

  • 相关阅读:
    Unity中 Start和Awake的区别
    一、osg编译
    中国象棋开源人工智能程序(带UI)搬运
    心得两则
    制作macOS Ventura U盘启动盘教程
    计算机毕业设计ssm+vue基本微信的健康食谱交流 论坛小程序
    文本框粘贴时兼容Unix、Mac换行符的方法源码
    Maven第一章:Maven安装、验证、使用
    Redis为什么这么快?高频面试题详解
    VectorDraw Developer Framework 10.1004 Crack
  • 原文地址:https://blog.csdn.net/lixiaogang_theanswer/article/details/126711568