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命令输出到终端。

最新文章

  1. [转]CSS 类名的单词连字符:下划线还是横杠?
  2. PRML读书会第五章 Neural Networks(神经网络、BP误差后向传播链式求导法则、正则化、卷积网络)
  3. android的adb详解(多设备时adb调用)
  4. iOS中block实现的探究
  5. mongoDB初探
  6. Python进阶之decorator装饰器
  7. scala 小结(一)
  8. C语言实现的猜数字小游戏(主要是对于自定义函数的运用)
  9. 初用jdbc来运行事务
  10. solr中Cache综述
  11. 四、Python-元组
  12. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十集之Nginx反向代理原理】(有参考其他文章)
  13. SpringData中使用@Modifying注解实现修改操作
  14. 使用requests抓取https报SSL错误
  15. PyCharm更改字体和界面样式
  16. Appium环境配置(二)
  17. STL进阶--vector vs deque
  18. js正则 - 正则判断是否为数字与字母的混合
  19. Spring Aop 注解方式参数传递
  20. asp.net web api 授权功能

热门文章

  1. Eclipse中启动tomcat报错java.lang.OutOfMemoryError: PermGen space的解决方法
  2. 【原创分享&#183;微信支付】 C# MVC 微信支付教程系列之扫码支付
  3. 接口--interface
  4. jdb调试scala代码的简单介绍
  5. MVC还是MVVM?或许VMVC更适合WinForm客户端
  6. TYPESDK手游聚合SDK服务端设计思路与架构之二:服务端设计
  7. 彻底搞懂Javascript的“==”
  8. Oracle-BPM安装详解
  9. docker4dotnet #2 容器化主机
  10. TCP/IP之TCP_NODELAY与TCP_CORK