变量的名字是它的值保存的地方。引用它的值称为变量替换。

$
让我们仔细地区别变量和变量的值。如果variable1是一个变量的名字,那么$variable1就是引用这个变量的值――即这个变量它包含的数据。如果只有变量名出现(即指没有前缀$),那就可能是在1)声明一个变量或是在给这个变量赋值。2)声明废弃这个变量,3)导出(exported)变量,4)或是在变量指示的是一种信号的特殊情况。(参考例子 29-5)。变量赋值可以使用等于号(=),比如:var1=27。也可在read命令和在一个循环的情况下赋值,比如:for var2 in 1 2 3。

在一个双引号(" ")里的变量引用不会禁止变量替换。所以双引号被称为部分引用,有时也称为"弱引用"。而在一个单引号里(' ')的变量替换是被禁止的,变量名只被解释为普通的字面意思。所以单引号被称为"全局引用",有时也被称为强引用。从第五章可得到更多的细节讨论。.

注意$variable实际上只是${variable}的简单的简写形式。在某些场合使用$variable形式会引起错误,这时你可能需要使用${variable}的形式了。

例子变量赋值与替换

#!/bin/bash

# Variables: 赋值和替换

a=375
hello=$a #-------------------------------------------------------------------------
# =号的左右两边都不能有空白符.
# 如果有一个空白符会怎么样? # 如果用 "VARIABLE =value",
# ^
#+ 脚本会以为"VARIABLE"是一个命令并且此命令带了一个参数"=value"。 # 如果用 "VARIABLE= value",
#   ^
#+ 脚本会以为"value"是一个命令,
#+ 并且把环境变量"VARIABLE"赋为空值:""。
#------------------------------------------------------------------------- echo hello # 没有引用变量,只是输出字符串 "hello". echo $hello
echo ${hello} # 这句和上面的一句一样 echo "$hello"
echo "${hello}" echo hello="A B C D"
echo $hello # A B C D
echo "$hello" # A B C D
# 正如你所看到的:echo $hello和echo "$hello"产生不同的输出。
#  ^ ^
# 把变量引起来会保留空白字符. echo echo '$hello' # $hello
# ^ ^
# 在单引号中的变量引用会被禁止,
#+ 字符"$"会仅仅被认为是一个普通的字符,而不是变量的前缀. # 注意不同引用的不同效果. hello= # Setting it to a null value.
echo "\$hello (null value) = $hello"
# 注意具有null值的变量不等同于废弃(unset)此变量
#+ 虽然最后的结果都是一样的(看下面的). # -------------------------------------------------------------- # 在同一行里用空白字符隔开为多个变量赋值是可以的。
#
# 警告:这可能减少可读性,并且可能是不可移植的。 var1=21 var2=22 var3=$V3
echo
echo "var1=$var1 var2=$var2 var3=$var3" # 在老版本的sh中这可能会引起问题 # -------------------------------------------------------------- echo; echo numbers="one two three"
# ^ ^
other_numbers="1 2 3"
# ^ ^
# 如果给变量赋的值中有空白字符,引号是必须的。
#
echo "numbers = $numbers"
echo "other_numbers = $other_numbers" # other_numbers = 1 2 3
echo echo "uninitialized_variable = $uninitialized_variable"
# 未初始化的变量具有null值 (即是没有值).
uninitialized_variable= # 声明,但没有初始化它 --
#+ 这就好像上面一样给它设置一个null 值
echo "uninitialized_variable = $uninitialized_variable"
# 它仍然是null值. uninitialized_variable=23 # 赋值
unset uninitialized_variable # 销毁变量.
echo "uninitialized_variable = $uninitialized_variable"
# 结果仍然是null值.
echo exit 0

Linux Shell编程(6)——变量替换的更多相关文章

  1. Linux Shell编程、变量、控制语句

    为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...

  2. Linux —— Shell编程之变量赋值和引用

    Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...

  3. linux shell编程之变量和bash配置文件(第一篇)

    编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...

  4. shell编程:变量替换

    定义变量:$ var_1="I love you, Do you love me" 输出变量:$ echo $var_1 打印结果:I love you, Do you love ...

  5. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  6. linux —— shell 编程(文本处理)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...

  7. linux —— shell 编程(编程语法)

    导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...

  8. linux shell编程总结

    linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...

  9. Linux Shell编程参考大全

    本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...

  10. linux shell 编程参考

    #!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...

随机推荐

  1. PTHREAD_MUTEX_INITIALIZER问题

      PTHREAD_MUTEX_INITIALIZER 与 expected expression before ‘{’ token 在进行 Posix thread 编程时,出现以下编译错误:err ...

  2. clientX 属性.

    Syntax: event.clientX The clientX event attribute returns the horizontal coordinate (according to th ...

  3. HibernateTool的安装和使用(Eclipse中)

    http://blog.sina.com.cn/s/blog_919273e20101g1t7.html

  4. 提供他人class文件

    1.考虑的问题,提供的文件是否依赖于其他jar包. 例如:解析html简历时,依赖于Jsoup包.

  5. iOS Instruments之Core Animation动画性能调优(工具复选框选项介绍)

    Core Animation工具用来监测Core Animation性能.它给我们提供了周期性的FPS,并且考虑到了发生在程序之外的动画(见图12.4) Core Animation工具提供了一系列复 ...

  6. EBS成本核算方法

    业务背景 成本核算方法,对应EBS系统中的成本方法,有四种: 1.标准成本 2.平均成本 平均成本又分为永续平均成本,即 Average Cost 期间平均成本,按照期间(自然月)来计算的平均成本 F ...

  7. 关于使用iframe标签自适应高度的使用

    在ifrome内设定最小高度,(此方法只适用于页面内切换高度不一.但是会保留最大高度,返回后保持最大高度不再回到最初页面的高度) <iframe id="one4" widt ...

  8. ICE学习第四步-----客户端请求服务器返回数据

    这次我们来做一个例子,流程很简单:客户端向服务器发送一条指令,服务端接收到这条指令之后,向客户端发送数据库中查询到的数据,最终显示在DataGridView上. 根据上一篇文章介绍的Slice语法,我 ...

  9. windows8.1 App中webView 使用定位

    windows8.1的webview的网页中没有办法直接定位  要想定位比较费劲   查了好久才发现一个可行的办法 那就是通过后台代码获取位置信息 然后调用页面中已有的获取位置信息的JS方法 把位置信 ...

  10. php笔记之GD库图片创建/简单验证码

    燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...