bash之参数和变量扩展(parameter and variable expansion)
来源:互联网 发布:万方经济统计数据库 编辑:程序博客网 时间:2024/06/05 23:37
写在前面
如果你问我bash的这么多扩展哪个功能最强大,那我会毫不犹豫地告诉你,当然是参数扩展啦~
为什么说参数扩展功能强大呢?那是因为通过参数扩展功能,我们可以完成很多意想不到的功能,例如可以完成参数值的删除、取代以及替换等功能~
SHELL参数以及参数的分类
开始讲述参数扩展之前,我们先要了解什么是shell的参数,以及引用参数的不同方法。
其实在shell编程中,参数(parameter)是个大概念,也是个笼统的概念,在bash手册中对参数的定义只是一句话:
A parameter is an entity that stores values.
意思是说在shell中参数是个实体(entity),这个实体中存储着各式各样的值(values)。
紧接着提到:
It can be a name, a number, or one of the special characters listed below under Special Parameters.
这句话其实是告诉我们,可以通过三类方式来引用参数,从而得到参数中存储的值。根据引用方式的不同,可以将参数分为三类,归纳如下:
(1)通过名称(name)来引用参数,这样的参数我们称之为变量(variables )。一个变量拥有自己的值和诸多属性,属性可以通过declare来设定,可以通过unset来取消一个变量。
(2)通过数字(number)来引用参数,这样的参数我们称之为位置参数(Positional Parameters)。位置参数在脚本被调用时自动初始化为传递给脚本的参数。脚本中调用函数时,位置参数会暂时替换成传递给函数的参数。我们可以使用set命令来改变位置参数的值,但是不能试图通过赋值语句来改变位置参数的值。
(3)最后还有一类参数,被称之为特殊参数(Special Parameters)。特殊在哪里? 特殊在我们只能通过shell内部预定义的特殊符号来引用它们,并且我们只能引用,不能试图通过赋值语句来重新赋值。预定义的特殊符号包括:* @ $ ? ! - $ 0
什么是参数扩展呢?
讲白了,所谓参数扩展就是通过符号$获得参数中存储的值。只不过呢,在获得最终的结果之前,允许我们对参数以及参数值做很多操作,例如博文一开始就提到的对参数值进行删除、取代以及替换等操作~
本篇博文就是详细讨论参数扩展过程中我们可以进行的诸多操作。
最简单的形式
参数扩展最简单直接的形式如下:
$parameter
或者
${parameter}
个人倾向于后者,第一有花括号一看就知道是参数扩展,其次可以根据需要在右花括号后头追加字符(串),否则shell会认为是参数的一部分。举个小例子就知道了,如下:
[09:49:23@astrol:~]$ WORD=car[09:49:25@astrol:~]$ echo "The plural of $WORD is most likely $WORDs"The plural of car is most likely[09:49:27@astrol:~]$ echo "The plural of $WORD is most likely ${WORD}s"The plural of car is most likely cars
可以看到不加花括号的话,shell认为WORDs是参数,然而我们并没有设置过这个参数,因此扩展结果为空。
需要注意的是,在bash中引用位置参数时,大于第9个参数时,两位的数字要求必须要在花括号内。例如:#{10}
另外,后文介绍的各种操作都是需要在花括号内进行的。
间接扩展(indirect expansion)
间接扩展也被很多人称为间接引用。如果熟悉C/C++的话,可以简单的把间接扩展理解成指针变量。
删除
子串
查找和替换
${parameter/pattern/string}
参考链接:
《BASH: Parameter expansion》(需梯子)
《shell变量详解》
《Linux 技巧: Bash 参数和参数扩展》《Bash parameters and parameter expansions》
《Shell参数扩展》
《Linux Shell参数扩展(Parameter Expansion)》
《Bash parameters and parameter expansions》
《An introduction to parameter expansion in Bash》
- bash之参数和变量扩展(parameter and variable expansion)
- Linux Shell参数扩展(Parameter Expansion)
- Bash编程七大展开之参数展开(Parameter Expansion)ZT
- Bash编程七大展开之参数展开(Parameter Expansion)
- Bash编程七大展开之参数展开(Parameter Expansion)
- bash之算术扩展(arithmetic expansion)
- Variable expansion Modifiers (parameter expansion)
- bash之波浪号扩展(tilde expansion)
- 参数展开(parameter expansion)
- bash变量(variable)
- bash学习之八:shell expansion(shell扩展)
- 整理bash之各种展开(expansion)
- Bash 参数和参数扩展
- Bash 参数和参数扩展
- bash的brace expansion(大括号扩展)功能
- PHP - Manual手册 - Function Reference函数参考 - Variable and Type Related Extensions变量和类型相关扩展 - Variable handling变量操作 - Variable handl
- Tensor, Variable 和Parameter
- Parameter expansion
- python循环解压rar文件
- readr包:读取/输出文本数据
- c++98's regex
- platform总线中device和driver的两种常用匹配方式(以mtk驱动为例)
- Spark_共享变量
- bash之参数和变量扩展(parameter and variable expansion)
- 一些面试题整理(java)
- 使用openssl加密一份文件
- Java 中常见的异常及处理
- git指令-Github使用记录
- Ubuntu搭建wordpress开发环境记录
- caffe-multilabel classification
- Lesson 2:作业2:打印当前时间。学习使用Date类和Calendar类。
- 使用Python统计字符串中单词数量