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

$
让我们仔细地区别变量和变量的值。如果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. 删除右键菜单的“用阿里旺旺发送此文件”项

    在运行对话框里的输入框内输入Regedit.exe,点击确定按钮就启动了注册表编辑器程序. 在注册表编辑器窗口左侧展开HKEY_CLASSES_ROOT\CLSID{0DE1378D-F811-40E ...

  2. 升级 node 版本

    npm install -g n n stablen v0.10.26 n 0.10.26

  3. Objective-C:swift、objective-c、C++、C混合编程

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

  4. CentOS LNMP安装phpMyAdmin

    假设: 已经配置好LNMP环境,并且Nginx的网页目录在/usr/local/nginx/html 1.下载phpMyAdmin wget https://files.phpmyadmin.net/ ...

  5. matlab切比雪夫拟合

    matlab中没有切比雪夫拟合的现成算法,这里把我程序中的这部分抽出来,说一下. 1.首先是切比雪夫计算式 function [ res ] = ChebyShev(num,i) res=; else ...

  6. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。

    错误: 解决方案: 1."设置应用程序池默认属性"/"常规"/"启用32位应用程序",设置为 true. 如下图所示:(已测试,好使) 方法 ...

  7. node 搭建开发框架express

    参考地址: http://www.itnose.net/detail/6095003.html 开发环境 E:\project> node -v v0.10.30 E:\project> ...

  8. oracle约束条件状态

    Oracle完整性约束有一下4种: • DISABLE NOVALIDATE • ENABLE NOVALIDATE • DISABLE VALIDATE • ENABLE VALIDATE   •  ...

  9. Visual C#实现Windows信使服务

    现在有很多网络管理软件都具备网络上信息实时传送的功能,虽然有些网络通讯软件功能比较强大,有的软件不仅可以传送文本信息,还可以传送二进制文件等.但 它们都有一个无法克服的缺点,那就是分发比较困难,信息传 ...

  10. absolut绝对定位的非绝对定位用法

    一.absolute绝对定位的流行用法 一般而言,我们会用absolute绝对定位做什么呢?就是绝对定位,顾名思意,定死在某个位置上.例如,lightbox效果就是使用的绝对定位,例如新浪微博的弹出提 ...