`
yhz61010
  • 浏览: 561406 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:12245
社区版块
存档分类
最新评论

[转] linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法

阅读更多
原文地址:http://www.cnblogs.com/fhefh/archive/2011/04/22/2024750.html

linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法

变量替换和变量默认值设置是紧密相关的,至少从概念出发是如此。

参数扩张是将类似于变量的参数用它的值来替换。例如以“echo $VAR”的形式调用一个简单的变量。此外还有更多的特性可以访问。这个句法还包含一些没有扩展的特性,虽然这些特性自身很有意义。首先,这类特性执行默认变量赋值。使用这些特性时,整个表达式需要用花括号括起来。

: ${VAR:=”some default”}

这些代码开始的冒号是一个正确执行非活动任务的shell命令。在这个句法中,它仅仅扩展了行中紧随其后的所有参数。本例中,只要是要在花括号内扩展参数值。

本行ongoing冒号中的参数是最有趣的部分;它是用花括号起来的一些逻辑的参数扩展。:=句法表示VAR变量将会和“some defalut”字符串进行比较。

在这个表达式中,如果变量VAR还没有被设置,那么“:=”之后表达式的值将被赋给它,这个值可能是一个数字,一个字符串,或者是另外一个变量。

系统中的脚步可能需要将多个变量设置成默认值。程序员可以在一行中给多个变量设置默认值,而不是编码一组变量替换,这样也使得代码更加紧凑、易读。下面的例子包含了程序员需要执行的各种替换操作。第一个默认值是一个显示的串,第二个是一个显示的整数,第三个是一个已定义的变量。

: ${VAR:=”some default”} ${VAR2:=42} ${VAR3:=$LOGNAME}

这几个变量替换类型和前例中的:=句法类似。因为不同替换类型的句法都是相同的,不过它们的意义却略有不同,可能很容易混淆。在大多数情况下,代码中执行替换句法的地方,这些替换仅仅用某个值替换了变量,但是并没有设置变量,也就是说变量并没有被真正赋值。下面句法类型的定义在所有的shell联机资料中找到的,但是这些说明通常不是很清楚。

:=句法

在这种替换中,使用和前例中相同的:=句法来设置默认值。

username=””

echo “${username:=$LOGNAME}”

在使用“:=”进行比较时,username变量已经被定义了,但是它的值为空。因此,这里对echo命令使用了变量LOGNAME的值,即设置变量username的值为LOGNAME的值。

有了这个特殊的句法,只有当变量username已被定义,而且有一个实际的非空值时,变量username才会被设置为变量LOGNAME的值。

和前例的主要不同是使用活动命令(echo)而不是被动的冒号来设置变量的默认值,当活动命令被调用时,默认赋值仍然会执行,并输出显示结果。

=句法

下面的语句和:=句法非常类似,但是没有冒号。

username=””

echo “${username=$LOGNAME}”

和前面一样,变量username已经被定义,但是它的值为空。在这个句法中,命令将会输出“echo”之后语句的执行结果。因为变量username虽然为空值,但已经被定义了,所以除了一个回车不会再有其他输出。只有当username变量完全没有定义时,才会将其设置为变量LOGNAME的值。

当脚本或者函数需要依赖某些定义变量时,就要使用这种语法。它主要应用于登陆。如果一个特定环境变量还没有被定义,就可以给它赋予脚本所需要的值。

:-句法

在这个命令中,因为变量username虽然已被定义但是为空值,echo语句将使用LOGNAME变量的值。

username=””

echo “${username:-$LOGNAME}”

这里username变量的值保持不变。这个命令和使用=句语法的不同之处是,在此命令被执行前,仅仅在代码中的“${}”句法中做替换。也就是说,echo命令将输出LOGNAME变量的值,但是这个值不会被赋给username变量。

-句法

当删除上述的:-语句中的冒号,即变成-的时候,因为username变量已被定义,输出将为空。如果未定义,就会使用LOGNAME变量的值。还有一点也与:-句法相同,即username变量的值没有改变。

username=””

echo “${username-$LOGNAME}”

当脚本评价或检查系统环境的时,:-句法和-句法都可以使用。这两种检查基本上是相反的,它们用默认值替换变量,或者甚至于不依赖username变量是否已经被定义。如果脚本中急需要一组被定义的变量,也需要一些不该被定义的变量,那么在脚本执行任务之前组合这两种句法,肯定可以实现正确的设置。

:?句法

使用:?句法时,如果username变量已被定义为非空值,在echo命令中就会使用username变量的值。如果username变量已被定义但却没有一个真正的值(也就是说非空)或者完全未被定义,那么在echo命令中就会使用LOGNAME的值,并且脚本退出执行。

username=””

echo “${username:?$LOGNAME}”

如果把问号字符的参数改为某种错误字符,那这个语句就会在代码调试和查找未定义变量时变得很有用。这段代码不仅仅输出字符串,而且会显示代码在脚本中所在行的位置。

?句法

从:?句法中去掉冒号使用username变量不必一定为非空值。如果username只被设置为一个空值,那么将使用这个空值。相反的,如果username变量没有被定义,则同前所述的:?句法,执行LOGNAME替换,脚本退出运行,并显示退出时所在代码行在脚本中的位置。

username=””

echo “${username?$LOGNAME}”

在脚本调试过程中,需要检查变量是否已被定义或者是非空的是否,:?和?句法是非常有用的。这个代码最大的优点是脚本会从出错行退出,而且会显示出错误行行号。在要显示的文本中加上类似于“is undefined”或者“has a null value”信息,可以更清楚的说明脚本中的问题。

:+句法

和前面的例子相比,这个句法有相反的作用。这这是因为,只有当变量已被定义而不是未定义的时候,“${}”表达式才执行替换。

username=””

echo “${username:+$LOGNAME}”

如果这里的username变量已被定义而且非空,因此使用LOGNAME的值。如果username变量未定义,或者已定义但为空,则将使用空值。在任何情况下,username变量的值都不会改变。

+句法

如果 前例:+中的冒号,一旦变量username被定义,“${}”表达式都将使用LOGNAME的值;进行这个替换时,username变量不需要有一个实际的值(即非空值)。如

username=””

echo “${username+$LOGNAME}”

“:+”、“+”句法的用法很多是喝“:-”、“-”句法的用法相同的。最主要的区别是“:+”、“+”示例检查的是一个已定义的变量,而不是未定义的变量。这类类似于家法、减法——一枚硬币的两面。

Have a nice day!!!
分享到:
评论

相关推荐

    linux-Shell基础视频教程

    10.5.2 Shell基础-Bash变量-变量测试与内容替换.mp4 10.6.1 Shell基础-环境变量配置文件-简介.mp4 10.6.2 Shell基础-环境变量配置文件-作用.mp4 10.6.3 Shell基础-环境变量配置文件-其他配置文件和登录信息.mp4

    telnet不能用 提示:-bash: telnet: command not found

    在Linux系统中,"telnet不能用,提示:-bash: telnet: command not found"这一问题通常是由于系统中没有预装telnet客户端或者其路径未被添加到环境变量PATH中导致的。telnet是一个远程登录协议,允许用户通过网络在...

    linux下提示bash-command not found.docx

    Linux 中解决 "bash: command not found" 问题的方法 在 Linux 系统中,经常会...解决 "bash: command not found" 问题的关键就在于理解 Linux 系统中的 PATH 变量,并正确地设置 PATH 变量以包含所有必要的命令目录。

    解决ssh远程登陆linux显示-bash-4.1$的问题

    以上就是小编为大家带来的解决ssh远程登陆linux显示-bash-4.1$的问题全部内容了,希望大家多多支持软件开发网~ 您可能感兴趣的文章:浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释php $_SERVER windows系统与linux...

    linux learning the bash shell

    Bash(Bourne Again SHell)是Unix/Linux操作系统中最常用的命令解释器之一,也是大多数Linux发行版的默认Shell。 #### 描述:Learn Bash Shell - **学习目标**:了解如何在Linux环境中使用Bash Shell进行操作。这...

    Linux CentOS下shell显示-bash-4.1$不显示用户名路径.docx

    在 CentOS 下新增一个用户,登录进去之后 shell 脚本的信息如下:bash-4.1$,而不是我们经常看到的 username@hostname 的组合,看起来很不舒服。 解决方案 问题的原因是因为没有配置 .bash_profile 的问题,可以...

    linux bash shell中文手册

    Linux Bash Shell 中文手册是为Linux用户和系统管理员提供的一份详细指南,涵盖了Bash Shell的基本用法和高级特性。Bash(Bourne-Again SHell)是GNU项目下的Unix/Linux操作系统默认的命令行解释器,它继承并扩展了...

    linux实验六 shell变量

    ### Linux实验六 Shell变量知识点详解 #### 一、实验目的 1. **熟悉Shell变量**: - Shell变量是Shell编程中的基本概念之一,用于存储数据。这些数据可以是文件名、数字或文本字符串。 - 变量分为两种类型:用户...

    linux - Advanced Bash Shell Scripting Guide

    《Linux高级Bash Shell脚本编程指南》是一本专为Linux用户深入理解并掌握Bash Shell脚本编程的宝贵资源。Bash(Bourne-Again SHell)是Unix及类Unix系统中最常用的命令行解释器,它为用户提供了一种强大而灵活的方式...

    LINUX shell编程.doc

    ### LINUX Shell 编程知识点详解 #### 一、Shell 程序简介 Shell 是 Linux 系统中连接用户与操作系统内核之间的桥梁。它既是一个命令解释器,也是一门高级的脚本语言,允许用户通过编写脚本来实现自动化任务。 **...

    linux超级基础系列-shell变量(本地变量和环境变量)

    ### Linux超级基础系列——Shell变量(本地变量与环境变量) #### 一、Shell与Shell变量简介 在Linux操作系统中,Shell是一种用户与操作系统交互的重要工具,它可以解释用户的命令,并将其传递给内核或其他应用...

    bash shell

    综上所述,Bash Shell 不仅是 Linux 和 MacOS 下的核心工具之一,也是进行脚本编程的强大工具。掌握了 Bash Shell 的基础知识和高级特性,不仅可以提高日常的工作效率,还能帮助解决各种复杂的系统管理和自动化任务...

    Linux bash Shell中的变量类型详解

    在Linux系统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家: 一、bash变量类型: 本地变量 局部变量 环境变量 位置变量 特殊变量...

    bash-shell-to-bat-converter:bash shell脚本到Windows批处理文件的转换器

    在线尝试: : 用法建立: git clone https://github.com/daniel-sc/bash-shell-to-bat-converter.gitcd bash-shell-to-bat-converternpm installnpm run tsc 用法: node lib/cli.js FILE_TO_CONVERT.sh 这将创建...

    Linux Shell Scripting with Bash

    ### Linux Shell Scripting with Bash #### 核心知识点解析 **1. Linux Shell Scripting 基础** - **Shell 的概念与作用** - Shell 是一个命令解释器,是用户与操作系统之间的交互界面。 - 用户通过输入命令,...

    Bash-Beginners-Guide:Bash入门手册/教程(英文HTML文档)

    通过这个"Bash-Beginners-Guide",无论是对Linux系统的新手,还是希望提升Bash技能的用户,都能找到所需的信息,逐步掌握Bash Shell的使用。这份教程以HTML格式呈现,方便在线阅读和搜索,使学习过程更为便捷。

    learn-bash-shell-script:学习BASH Shell脚本

    在Linux和Unix系统中,Bash...在`learn-bash-shell-script-master`这个压缩包中,可能包含了各种教程、示例脚本和练习,帮助你深入理解和掌握Bash Shell脚本。记得动手尝试,理论与实践相结合是掌握任何技能的关键。

Global site tag (gtag.js) - Google Analytics