参数展开(parameter expansion)
2016-02-12 23:59
176 查看
参数展开是shell变量在程序中使用的过程。在shell中变量使用$varname 来引用变量。
变量名称可以括在花括号里(${variable}),括号里面可以增加一些额外语法,执行额外功能。
% 从尾部开始匹配
eg: path=/home/tost/mem/long.file.name
位置参数名称以单个整数来命名,当这个整数大于9时,使用花括号{}括起来。
变量名称可以括在花括号里(${variable}),括号里面可以增加一些额外语法,执行额外功能。
替换运算符(:)
运算符(:)是可选的,如果省略冒号,则将每个定义中的‘存在且非null' 修改为 ’存在‘运算符 | 用途 | 说明 |
${varname:-default} | 如果变量未定义,则返回默认值 | 如果varname存在且非null,则返回其值;否则返回default默认值 |
${varname:=default} | 如果变量未定义,则设置为默认值 | 如果varname存在且非null,则返回其值;否则设置变量为default,并返回其值 |
${varname:?msg} | 为了捕捉由于变量未定义所导致的错误,显示提示信息 | 如果varname存在且非null,则返回其值;否则显示varname:msg,并退出当前的命令或者脚本。省略msg,会显示默认信息‘parameter null or not set’。 交互式shell不需要退出 |
${varname:+msg} | 为测试变量的存在 | 如果varname存在且非null,则返回msg;否则返回null |
模式匹配运算符(# %)
# 从开头开始匹配% 从尾部开始匹配
eg: path=/home/tost/mem/long.file.name
运算符 | 用途 | 说明 |
${varname#pattern} | 从变量值的开头处匹配,则删除匹配的最短部分,并返回剩下的部分 | 例:${path#/*/},返回 tost/mem/long.file.name |
${varname##pattern} | 变量开头处匹配,匹配最长部分,并返回剩下部分 | 例:${path##/*/},返回 long.file.name |
${varname%pattern} | 变量尾部匹配,匹配最短部分,并返回剩下部分 | 例:${path%.*},返回 /home/tost/mem/long.file |
${varname%%pattern} | 变量尾部匹配,匹配最长部分,并返回剩下部分 | 例:${path%%.*},返回 /home/tost/mem/long |
位置参数(positional parameter)
shell脚本的命令行参数,也表示shell函数内的函数参数。位置参数名称以单个整数来命名,当这个整数大于9时,使用花括号{}括起来。
变量 | 说明 |
$# | 传递给shell脚本或函数的参数总数 |
$* $@ | 一次表示所有的命令行参数 |
“$*” | 将所有命令行中参数视为单个字符串。等同于“ $1 $2 $3 ...” |
"$@" | 将所有命令行参数的每个视为单独字符串。等同于 “$1” "$2" "$3" |
特殊参数
POSIX 内置Shell变量变量 | 说明 |
# | 目前参数个数 |
@ | 传递给当前进程的命令行参数,在双引号内,每个参数会生成一个字符串 |
* | 传递给当前进程的命令行参数,双引号内,所有参数生成一个字符串 |
-(连字号) | shell选项 |
? | 前一个命令的退出状态 |
$ | shell程序的名称 |
0(零) | shell程序名称 |
! | 最近一个后台命令的进程编号,可通过wait命令以供稍后使用 |
ENV | 一旦引用,则仅用于交互式Shell中,$ENV的值是可展开的参数。结果应为要读取和在启动时要要执行的一个文件的完整路径名称。这是一个XSI必需的变量 |
HOME | 用户根登陆目录 |
IFS | 内部的字段分隔符 |
LANG | locale默认值,其他LC_*变量会覆盖其值 |
LC_ALL | 当前locale的名称;会覆盖LANG与其他LC_*变量 |
LC_COLLATE | 用来排序字符的当前locale名称 |
LC_CTYPE | 模式匹配期间,字符类别的当前locale |
LC_MESSAGES | 当前语言的名称 |
LINENO | 刚执行过的函数或者脚本内的行编号 |
NLSPATH | 在$LC_MESSAGES(XSI)所给定的信息语言里,信息目录的位置 |
PATH | |
PPID | 父进程的进程编号 |
PS1 | 主要命令提示字符串,默认为 $ |
PS2 | 行继续提示字符串 默认 > |
PS4 | 以set -x 设置的执行跟踪的提示字符串 默认 + |
PWD | 当前工作目录 |
相关文章推荐
- 解析XML文件的几种常见操作方法:DOM/SAX/DOM4j
- Ueditor 1.4.3.1 使用 ThinkPHP 3.2.3 的上传类进行图片上传
- Appium环境搭建步骤 For Mac
- 腾讯的职级系统 梁宁-闲花照水录
- Java中实现反盗链Filter
- 【慕课笔记】U4 多态 第6节 综合练习
- 华为机试题:输入整型数组和排序标识,对其元素按照升序或降序进行排序
- LW教你自定义安卓控件之LoadingView
- 子窗体与父窗体调用对方js方法
- 前端实战——完美解决文本框超出内容用“……”表示,鼠标滑过时显示隐藏内容
- Maven: 互联网开发常用的jar以及版本pom.xl文件
- 使用python开源组件yarn-api-client获取yarn信息
- BNUOJ 51275 道路修建(并查集)
- **LeetCode 30. Substring with Concatenation of All Words
- 在腾讯的第三堂产品课——爆品的秘密 梁宁-闲花照水录
- Maven: 每次更新Maven Project ,JAVA 版本都变为1.5
- 河南第六届ACM省赛(Card Trick)
- hibernate异常(2)
- 【高斯消元】[JSOI2008][HYSBZ/BZOJ1013]球形空间产生器sphere
- Eclipse快捷键