• 『忘了再学』Shell基础 — 11、变量定义的规则和分类


    1、定义变量的规则

    在定义变量时,有一些规则需要遵守

    • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是2name则是错误的。
    • 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。
    • 变量用等号连接值,等号左右两侧不能有空格。
      shell
      [root@localhost ~]# name = cangls
      -bash: name: command not found
    • 变量的值如果有空格,需要使用单引号或双引号包括。如:test="hello world!"。其中双引号括起来的内容$\和反引号都拥有特殊含义,而单引号括起来的内容都是普通字符。
    • 在变量的值中,可以使用“\”转义符。
    • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含"$变量名"或用${变量名}包含变量名(就相当于Java中字符串连接)。例如:
      shell
      #叠加变量 test,变量值变成了123456
      [root@localhost ~ ] # test=123
      [root@localhost ~ ] # test="$test"456
      [root@localhost ~ ] # echo $test
      123456
      
      #再叠加变量 test,变量值变成了123456789
      [root@localhost ~ ] # test=${test}789
      [root@localhost ~ ] # echo $test
      123456789

      总结:变量值的叠加可以使用两种格式:"$变量名"${变量名}

    • 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$( )包含命令。之前说过,例如:
      shell
      [root@localhost ~ ] # test=$(date)
      [root@localhost ~ ] # echo $test
      2018年 10月 21日 星期一 20:27:50 CST
    • 环境变量名建议大写,便于和命令区分。

    2、变量的分类

    Shell中变量的分类并不是安装变量的类型进行分类的。

    • 用户自定义变量:这种变量是最常见的变量,由用户自由定义变量名和变量的值。(只在当前Shell中生效,子Shell中不生效)
    • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据,比如当前登录用户,用户的家目录,命令的提示符等。环境变量的变量名可以自由定义,但是一般对系统起作用的环境变量的变量名是系统预先设定好的。

      说明:环境变量分为两种,一种是允许用户自定义的,还有一种是系统定义好的。用户定义的这种环境变量,对整个操作系统的环境来说作用不是很大,唯一的作用就是,在父子Shell中都生效(这个以后再说)。而系统定义的环境变量,会对我们的操作环境产生一定影响。对系统定义的环境变量,我们不能修改变量的名称和作用,只能修改变量的属性值。系统定义的环境变量主要就是在几个重要的环境变量配置文件中的变量,如/etc/profile文件中的变量。
      ...
      提示:环境变量的作用域是整个系统都生效,包括父Shell子Shell。在这种情况下,为了避免和系统命令产生冲突,建议环境变量的名称都是大写(主要是自定义的环境变量,系统定义的环境变量一般都是大写的,也不能改),因为Linux系统中所有的系统命令都是小写(只有大写的命令选项),这样就可以避免混淆了。

    • 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
    • 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。(位置参数变量其实就是预定义变量中的一个类型)

    说明:预定义变量和位置参数变量一共就几种,需要记住(以后详细讲)。


    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16141036.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    JS--对象数组深拷贝的方法
    APP广告竞价机制:头部竞价与瀑布流
    戴尔股价节节攀升,但去中国化导致老本行正被中国消费者抛弃
    几种swf格式视频转换器简介
    vcs与verdi学习记录
    C# DLL实现泄露实验
    Webpack
    FreeRTOS 消息队列 详解
    实现pathListToMap, 能够将输入的pathList转化为具有层级结构的map类型
    数据工程师日记:10年职场老鸟,我居然被新人给上了一课
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16141036.html