1. 前言

  Bash是一门流行在*nix系统下的脚本语言。作为一门脚本语言,变量是一门语言的基本要素,在这篇教程中,我们将学习Bash中的变量是怎么表示的,以及变量相关的一些语法规则。

2. Bash中的变量

  Bash作为一门编程语言,它通过变量来表示数据。Bash的变量在概念是和我们平时接触的其他编程语言类似,都是以字符表示的一些列名字标签,通过引用这些名字标签来使用变量所表示的值。通过一个变量,我们可以引用一块内存区域的值。一个变量的赋值操作,抛开细节,我,我们可以简单的理解为是为这个名字标签和内存区域创建一个关联。

  在Bash中,变量是无类型的。这个和其他比如C,Java和C++等强类型语言有很大的不同。

代码:

var=
echo "$var"
=> var="var is not a number"
echo "$var"
=> var is not a number

3. 变量替换

  Bash中,一个变量可以理解为是这个变量的值的占位符。引用这个变量的值得过程,可以简单的理解为是变量替换的过程。在Bash中,变量替换是通过操作符"$"完成的。

代码:

var=

echo var
=> var echo $var
=>

看上面的例子,我们可以看到,通过"$"符号引用一个变量的时候,会获得这个变量的值。而单独使用这个变量名字的时候,在echo命令中,只是获得了这个变量名称的字面值而已,所以"var" 和 "$var"是不同的。

  一般情况下,使用"$"符+变量名称来引用变量的值,但是在一些特殊的语句和命令中,我们可以省略"$"符号,只是用变量名称来引用变量的值。比如:

  • 对变量进行赋值时候
  • 声明变量时候
  • 在"(())"语句表示的算术计算语句中的时候
  • 使用unset命令的时候

后面在学习到这些内容相关的主题的时候,我们会看到上面提到的这些不使用"$"符号的情况。

  通过双引号(")包裹的字符串中,如果包含了变量替换,那么变量替换是有效的。而包含在单引号(')的字符串中的变量替换,是无效的,变量名称将被作为普通字符串。

代码:

var=

echo "$var"
=> echo '$var'
=> $var

  在双引号中的变量进行变量替换的时候,如果变量名称和其他字符中间没有分隔符(一般是空格),那么变量替换就会出现歧义,所以需要另一种方式的变量替换语法,使用${var}来进行变量替换。

代码:

var=

echo "$varis100"
=>
# 输出是空的,因为上面的变量替换的是"varis100"这个变量的值,而这个变量在上下文中没有定义,所以是空的 echo "${var}is100"
=> 100is100

  在使用echo命令输出一个变量的时候,需要注意一个问题。一个变量是否被包含在一个双引号中,输出的结果是不同的。

代码:

var="A B  C    D"

echo $var
=> A B C D echo "$var"
=> A B C D

4. 变量赋值

  在Bash中,变量赋值的方式有很多种,通过等号(=)来进行变量的赋值是最常见的一种方式。 在使用等号进行赋值的时候,等号两边是不能包含空格的

代码:

var=

echo "var = $var"
=> var =

除了使用等号来进行变量赋值以外,还可以使用"let"命令来进行赋值。

代码:

let var=

echo "var = $var"
=> var =

在for循环语句中,也可以使用"for ... in ..."的方式给变量赋值。

for var in
do
echo $var
done =>

使用read命令,可以从用户输入中获得值并给变量赋值。

代码:

echo -n "Enter \"var\""
read var
echo "The value of var is $var" <=
=> The value of var is

5. 总结

  我们已经学习了Bash中有关变量的一些概念和变量的赋值,引用等语法规则。学会了怎么在一个Bash脚本中创建一个变量,给变量赋值以及通过echo命令输出到终端。

Bash简明教程--变量的更多相关文章

  1. 羽夏 Bash 简明教程(上)

    写在前面   该文章根据 the unix workbench 中的 Bash Programming 进行汉化处理并作出自己的整理,并参考 Bash 脚本教程 和 BashPitfalls 相关内容 ...

  2. 羽夏 Bash 简明教程(下)

    写在前面   该文章根据 the unix workbench 中的 Bash Programming 进行汉化处理并作出自己的整理,并参考 Bash 脚本教程 和 BashPitfalls 相关内容 ...

  3. Python 简明教程 --- 4,Python 变量与基本数据类型

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 任何一个人都会写出能够让机器理解的代码,只有好的程序员才能写出人类可以理解的代码. -- Marti ...

  4. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

  5. Environment Modules 简明教程

    Environment Modules 简明教程 1. Modules 简介 在 Linux 超算平台上,通常会安装有不同版本的多种编译器和其他软件等,如常用的编译器有 intel 和 gnu,常用的 ...

  6. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  7. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

  8. 2013 duilib入门简明教程 -- 自绘控件 (15)

        在[2013 duilib入门简明教程 -- 复杂控件介绍 (13)]中虽然介绍了界面设计器上的所有控件,但是还有一些控件并没有被放到界面设计器上,还有一些常用控件duilib并没有提供(比如 ...

  9. grootjs 简明教程

    grootJs简明教程 mvvm框架也是解决的一类问题,在某些时候会提高生产效率: 经过接近一个月的努力,grootJs测试版终于发布了 grootJs是一个mvvm的框架,名字取 grass 和ro ...

随机推荐

  1. mysql学习之 sql语句的技巧及优化

    一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...

  2. Base64编码

    Base64编码 写在前面 今天在做一个Android app时遇到了一个问题:Android端采用ASE对称加密的数据在JavaWeb(jre1.8.0_7)后台解密时,居然解密失败了!经过测试后发 ...

  3. 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包

            微信支付教程系列之现金红包           最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...

  4. ASP.NET MVC开发日常一:SessionID合理清除

    在MVC Web开发中临时存储数据一般会用到Session,Cookie,ViewBag,ViewData,TempData.每个的使用场景是不同,具体区别有空再补上. Session数据最敏感,最需 ...

  5. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  6. iOS UITableView 与 UITableViewController

    很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...

  7. WPF 普通属性变化通知

    问题描述:使用ObservableCollection<OrderItem> source 给Datagrid.ItemsSource赋值,在后台更新source集合后,前台Datagri ...

  8. java中if和switch哪个效率快

    首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断:而 switch 只能对基本类型进行数值比较.两者的可比性就仅限在两个基本类型比较的范围内.说到基本类型 ...

  9. 好用的Markdown编辑器一览 readme.md 编辑查看

    https://github.com/pandao/editor.md https://pandao.github.io/editor.md/examples/index.html Editor.md ...

  10. SAE+WordPress快速搭建个人博客

    前些天一时冲动,买了个域名,我想总不能放着不用吧,干脆就搭建了一个个人博客.下面我把搭建的过程分享给大家.注意,此文并不是攻略,只是为了记录下这个从无到有的过程,当然,假如解决了你的疑惑,那当然是极好 ...