`

linux parameter substitution - 字符串/变量处理

阅读更多
【基本介绍】
这里我们介绍bash里面对字符串,变量等的替换等操作。

【基本用法】
shell parameter substitution
1. ${parameter}
2. ${parameter-default} ${parameter:-default}
3. ${parameter=default} ${parameter:=default}
4. ${parameter+alt_value} ${parameter:+alt_value}
5. ${parameter?err_msg} ${parameter:?err_msg}
6. ${#parameter}
7. ${var#pattern} ${var##pattern}
8. ${var%pattern} ${var%%pattern}
9. ${var:pos} ${var:pos:len}
10.  ${var/pattern/replacement} ${var//pattern/replacement} ${var/#Pattern/Replacement} ${var/%Pattern/Replacement}
11. ${!varprefix*}, ${!varprefix@}

1. 变量值 - 不解释了
[root@sparkVM tmp]# cat 1.sh 
parameter='test'
echo $parameter    #test
echo ${parameter}  #test 


2. 默认值
[root@sparkVM tmp]# cat 2.sh 
echo ${parameter-default}      #变量没有定义的时候使用默认值
echo ${parameter:-default}
echo ${parameter=default} 
echo ${parameter:=default}
parameter=
echo ${parameter-default}     #变量定义了,但是是空值,
echo ${parameter:-default}    # :- :=都继续用默认值 , 其他就是空值
echo ${parameter=default} 
echo ${parameter:=default}
parameter='test'               #变量定义了值,都使用变量的值
echo ${parameter-default} 
echo ${parameter:-default}
echo ${parameter=default} 
echo ${parameter:=default}
[root@sparkVM tmp]# bash 2.sh 
default
default
default
default

default

default
test
test
test
test


3. 有值就取默认,没有定义就空

[root@sparkVM tmp]# cat 3.sh 
echo 1, ${parameter+default}     #没有定义变量,输出空
echo 2, ${parameter:+default}
parameter=
echo 3, ${parameter+default}    #定义了变量,但是为空
echo 4, ${parameter:+default}   #:+还是使用原来值,+使用默认值
parameter='test'
echo 5, ${parameter+default}    #定义了变量,不为空
echo 6, ${parameter:+default}   #使用默认值
[root@sparkVM tmp]# bash 3.sh 
1,
2,
3, default
4,
5, default
6, default


4. 有值无值判断
[root@sparkVM tmp]# cat 4.sh 
parameter='test'
echo 1,  ${parameter?default}    #变量值定义 不为空,输出变量值
echo 2, ${parameter:?default}

parameter=
echo 3, ${parameter?default}    #变量值定义,为空, ?输出变量值,:?判断为无变量值
#echo ${parameter:?default}
unset parameter
#echo 4, ${parameter?default}   #无变量值,报错提示:default
#echo 5, ${parameter:?default}
[root@sparkVM tmp]# bash 4.sh 
1, test
2, test
3,



5.变量长度  - 不解释
[root@sparkVM tmp]# cat 5.sh 
echo ${#parameter}
parameter=
echo ${#parameter}
parameter='test'
echo ${#parameter}
[root@sparkVM tmp]# bash 5.sh 
0
0
4



6. 变量截取
[root@sparkVM tmp]# cat 6.sh 
var1=abcd12345abc6789
echo ${var1}
echo ${var1#a*c}            #‘#’是从左往右截取  #最短匹配 ##最长匹配
echo ${var1##a*c}

echo ${var1%a*c}           #‘#/%’如果最左或者最右开头没有匹配的,那么输出源
echo ${var1%%a*c}

echo ${var1%b*9}            # ‘%’是从右往左截取  %最短匹配 %%最长匹配
echo ${var1%%b*9}
[root@sparkVM tmp]# bash 6.sh 
abcd12345abc6789
d12345abc6789
6789
abcd12345abc6789
abcd12345abc6789
abcd12345a
a



7. 变量长度截取
[root@sparkVM tmp]# cat 7.sh 
var='abcdefghijklmn'    
echo ${var:2}        #索引从2开始到结尾,初始为0
echo ${var:2:5}      #索引从2开始,长度为5
[root@sparkVM tmp]# bash 7.sh 
cdefghijklmn
cdefg



8. 变量替换
[root@sparkVM tmp]# cat 8.sh 
var='abcdefghijklmncdefj'
echo ${var/cde/CDE}      #${var/Pattern/Replacement}   替换第一次匹配
echo ${var//cde/CDE}     #${var//Pattern/Replacement} 全局替换

echo ${var/#abc/ABC}     #‘#’从最左边开始匹配
echo ${var/%efj/EFJ}     # '%'从最右边开始匹配
echo ${var/#cde/CDE}
echo ${var/%cde/CDE}     #最右边没有匹配,输出源
[root@sparkVM tmp]# bash 8.sh 
abCDEfghijklmncdefj
abCDEfghijklmnCDEfj
ABCdefghijklmncdefj
abcdefghijklmncdEFJ
abcdefghijklmncdefj
abcdefghijklmncdefj



9. 变量匹配
[root@sparkVM tmp]# cat 9.sh 
# This is a variation on indirect reference, but with a * or @.
# Bash, version 2.04, adds this feature.

xyz23=whatever
xyz24=

a=${!xyz*}         #  Expands to *names* of declared variables
# ^ ^   ^           + beginning with "xyz".
echo "a = $a"      #  a = xyz23 xyz24
a=${!xyz@}         #  Same as above.
echo "a = $a"      #  a = xyz23 xyz24

echo "---"

abc23=something_else
b=${!abc*}
echo "b = $b"      #  b = abc23
c=${!b}            #  Now, the more familiar type of indirect reference.
echo $c            #  something_else
[root@sparkVM tmp]# bash 9.sh 
a = xyz23 xyz24
a = xyz23 xyz24
---
b = abc23
something_else


【参考引用】
http://tldp.org/LDP/abs/html/parameter-substitution.html#PARAMSUBREF
分享到:
评论

相关推荐

    6 Validation - Substitution - Currency - Tax.exe

    6 Validation - Substitution - Currency - Tax

    shell字符串截取报错:Bad substitution的解决

    shell进行字符串截取 运行 ${GIT_COMMIT:0:6}报错: /tmp/jenkins7505855461406722507.sh: 4: /tmp/jenkins7505855461406722507.sh: Bad substitution 原因:两种shell语言解释器 bash和dash 查看当前/bin/sh ...

    linux MySQL 8.0二进制包安装

    Linux MySQL 8.0 二进制包安装 MySQL 是一个广泛使用的开源关系型数据库管理系统,最新版本为 8.0。在 Linux 系统中,安装 MySQL 8.0 二进制包需要按照以下步骤进行。 首先,下载 MySQL 8.0 二进制包。可以从官方...

    Linux环境搭建流程文档

    Linux环境搭建流程文档 本文档旨在指导读者逐步搭建一个完整的Linux环境,包括JDK、MySQL、Nginx、Redis和MinIO等组件的安装和配置。 一、Linux安装部署JDK环境 1. 下载JDK:从Oracle官方网站下载JDK安装包,网址...

    CentOS Linux release 7.9.2009 安装 mysql-5.7.37-linux-glibc2.12-x8

    在本教程中,我们将详细介绍如何在 CentOS Linux release 7.9.2009 上安装 MySQL 5.7.37。首先,我们要确保系统中没有预装的 MariaDB 或其他 MySQL 版本,因为它们可能与新安装的 MySQL 冲突。 1. 卸载预装的 ...

    mysql安装配置教程 linux系统下安装

    ### MySQL安装配置教程:Linux系统下的详细步骤 #### 一、背景与目标 本文旨在详细介绍如何在Linux系统下安装配置MySQL数据库。对于那些希望在移动电商服务器上部署MySQL的开发者和运维人员来说,本教程提供了从零...

    linux下安装java-mysql-redis-tomcat.docx

    在Linux CentOS 7.6操作系统环境下,安装Java、MySQL、Redis和Tomcat是构建服务器环境的基础步骤。以下是如何在这类环境中逐步安装这些组件的详细指南。 **一、JDK的安装** 1. 首先,确保已下载JDK的tar.gz安装包...

    substitution.js:JavaScript库替换字符串中的占位符

    该库旨在用小字符串替换占位符。 它将递归替换对象或数组中的所有字符串。 当提供回调作为替换时,仅在使用占位符的情况下才调用它。 在node.js或浏览器中工作(可选的AMD支持)。 安装 npm npm install ...

    String-Substitution:简单的运行时字符串替换函数

    它旨在在运行时从输入中获取字符串、模式和替换字符串,并在不执行eval情况下处理替换。 替换字符串可能包含 [编号] 匹配变量( $1或${1} ),这些变量将被插入(通过使用另一个s///而不是eval )。 用法 sub_*和...

    DES 字符串加密

    - 处理边界问题:DES处理的是64位的数据块,如果输入字符串长度不是8的倍数,需要填充到8的倍数,并在解密后去除填充。 4. **界面设计**:在C++ Builder中,可以通过拖放控件来构建用户界面,例如,可以添加`TEdit...

    兼容性对比表格word排版格式1

    在IT行业中,数据库管理系统(DBMS)是至关重要的组件,尤其是对于存储和处理大量数据的企业。这里我们主要关注两个版本的MySQL的兼容性和配置差异:TDSQL(基于MariaDB 10.1)和MySQL 5.6。通过对各种参数的比较,...

    Substitution-crx插件

    Substitution-crx插件是基于英语的浏览器扩展程序,旨在以一种创新和幽默的方式改善用户在互联网上的阅读体验。这款插件的设计灵感来源于著名网络漫画网站xkcd,特别是编号1288的漫画,该漫画提出了一个通过替换词汇...

    mysql搭建1

    在本教程中,我们将详细介绍如何在Linux环境下安装MySQL 5.7.20。MySQL是一个流行的开源关系型数据库管理系统,广泛应用于Web应用、数据分析和其他业务系统。以下是详细步骤: 1. **下载MySQL**: 首先,你需要...

    sphinx-substitution-extensions:Sphinx的扩展,允许替换

    $ pip install Sphinx-Substitution-Extensions 这支持Python 3.8+。 将以下内容添加到conf.py : # sphinx-prompt must be the first of these two. extensions += [ 'sphinx-prompt' , 'sphinx_substitution_...

    win7 64位下如何安装配置mysql-5.7.4-m14-winx64.docx

    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" ``` **注意**:`datadir`目录必须存在,如果不存在需要手动创建。 #### 四、添加环境变量 为了能够在任何位置通过命令行启动MySQL...

    MySQL 5.7.18 release版安装指南(含有bin文件版本)

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] socket = /home/saojie/mysql-5.7.18/mysql.sock ``` 初始化MySQL服务器是安装过程中的关键步骤,可以通过运行以下命令完成: ```bash bin/mysqld ...

    密码解码工具Linux----CaptfEncoder-win-x64-2.1.0

    编码转换包括:Ascii 编码,Base64、Base 系列编码,Escape 编码,Hex 编码, Html entity 编码,莫尔斯电码,Quoted-printable(可打印字符引用编码),Shellcode 编码,Sql 编码,Tap Code(敲击码),Unicode ...

Global site tag (gtag.js) - Google Analytics