bash中的字符串处理

bash的变量中存放的字符串的处理方式:

bash变量:

弱变量:

1.无需事先定义即可应用;

2.变量没有数据类型的硬性要求,默认是字符型;

1.字符串切片:

${#VAR}:返回字符类型变量的变量值的长度;

${#VAR:offset}:返回字符型变量中第"offset"之后的内容,不包括"offset"这个位置的字符;offset取值范围:0-$[${#VAR}-1]

${VAR:offset:number}:返回字符型变量中从第"offset"字符开始长度为number的字符部分;

${VAR: -length}:取字符型变量字符串最右侧的"length"长的字符串;

[[email protected] ~]# VAR=hello
[[email protected] ~]# echo ${#VAR}
5
[[email protected] ~]# echo ${VAR:2}
llo
[[email protected] ~]# echo ${VAR:1:3}
ell
[[email protected] ~]# echo ${VAR: -4}
ello

注意:在"-length"之前要留有空格;

2.基于模式(PATTERN)取字符串

${VAR#*PATTERN}:自左而右,查找VAR变量存储的字符串中,第一次被PATTERN匹配的字符,删除从字符串开始到PATTERN匹配的字符之间的所有字符;

${VAR##*PATTERN}:自左而右,查找VAR变量存储的字符串中,所有被PATTERN匹配的字符,删除从字符串开始到最后一次PATTERN匹配的字符之间的所            有字符;

${VAR%PATTERN*}:自右向左去查找VAR变量所存储的字符串中,第一次被PATTERN所匹配到的字符,删除从字符串结尾到第一个被PATTERN匹配到的字符            之间的所有字符;

${VAR%%PATTERN*}自右向左去查找VAR变量所存储的字符串中,所有被PATTERN所匹配到的字符,删除从字符串结尾到最后一个被PATTERN匹配到的字符            之间的所有字符;

[[email protected] ~]# VAR=/etc/xdg/menus
[[email protected] ~]# echo  ${VAR#*/}
etc/xdg/menus
[[email protected] ~]# echo  ${VAR##*/}
menus
[[email protected] ~]# echo  ${VAR%/*}
/etc/xdg
[[email protected] ~]# VAR=etc/xdg/menus
[[email protected] ~]# echo  ${VAR%%/*}
etc

3.查找替换:

${VAR/PATTERN/SUBSTRING}:在VAR变量中,查找能够被PATTERN所匹配的内容,将其中第一个匹配到的结果更换成SUBSTRING;

${VAR//PATTERN/SUBSTRING}:在VAR变量中,查找能够被PATTERN所匹配的内容,将其中所有匹配到的结果更换成SUBSTRING;

${VAR/#PATTERN/SUBTRING}:在VAR变量中查找行首匹配PATTERN的内容,将匹配的结果更换成SUBSTRING;

${VAR/%PATTERN/SUBTRING}:在VAR变量中查找行尾匹配PATTERN的内容,将匹配的结果更换成SUBSTRING;

[[email protected] ~]# VAR=etc/xdg/menus
[[email protected] ~]# echo ${VAR/e/a}
atc/xdg/menus
[[email protected] ~]# echo ${VAR//e/a}
atc/xdg/manus
[[email protected] ~]# echo ${VAR/#e/a}
atc/xdg/menus
[[email protected] ~]# echo ${VAR/%s/a}
etc/xdg/menua

4.查找删除:

${VAR/PATTERN}:在VAR变量中,查找能够被PATTERN所匹配的内容,将其中第一个匹配到的结果删除;

${VAR//PATTERN}:在VAR变量中,查找能够被PATTERN所匹配的内容,将其中所有匹配到的结果删除;

${VAR/#PATTERN}:在VAR变量中查找行首匹配PATTERN的内容,将匹配的结果删除;

${VAR/%PATTERN}:在VAR变量中查找行尾匹配PATTERN的内容,将匹配的结果删除;

[[email protected] ~]# VAR=etc/xdg/menus
[[email protected] ~]# echo ${VAR/dg}
etc/x/menus
[[email protected] ~]# echo ${VAR//"/"}
etcxdgmenus
[[email protected] ~]# echo ${VAR/#e}
tc/xdg/menus
[[email protected] ~]# echo ${VAR/%s}
etc/xdg/menu

5.字符串的大小写转换:

${VAR^^}:将变量当中的所有的小写字母转换成大写字母;

${VAR,,}:将变量当中的所有的大写字母转换成小写字母;

[[email protected] ~]# VAR=etc/xdg/menus
[[email protected] ~]# echo ${VAR^^}
ETC/XDG/MENUS
[[email protected] ~]# VAR=AAAAA
[[email protected] ~]# echo ${VAR,,}
aaaaa

6.变量赋值操作:

${VAR:-value}:如果变量VAR为空值或者变量未被定义,那么就直接返回value中的值;否则返回变量中VAR的值;

${VAR:+value}:如果变量VAR已经被定义且不为空,那么就直接返回value中的值;

${VAR:=value}:如果变量VAR为空或变量未被定义,那么直接返回value的值,并且将value的值赋给变量VAR;否则返回变量VAR的值;

[[email protected] ~]# VAR=AAAAA
[[email protected] ~]# echo ${VAR:-Xuwenlong}
AAAAA
[[email protected] ~]# echo ${MYVAR:-Xuwenlong}
Xuwenlong
[[email protected] ~]# VAR=AAAAA
[[email protected] ~]# echo ${VAR:+Xuwenlong}
Xuwenlong
[[email protected] ~]# echo $MYVAR
[[email protected] ~]# echo ${MYVAR:=Xuwenlong}
Xuwenlong
[[email protected] ~]# echo $MYVAR
Xuwenlong

7.变量的间接引用:

如果第一个变量的值恰好是第二个变量的变量名,从第一个变量引用第二个变量的值得方法,就称为变量的间接引用,也称为间接变量引用;

bash提供了这样的间接变量引用的房方法:

eval MYVAR=\$$VAR1

如:VAR1=VAR2,VAR2=Xuwenlong

[[email protected] ~]# VAR1=VAR2
[[email protected] ~]# VAR2=Xuwenlong
[[email protected] ~]# eval MYVAR=\$$VAR1
[[email protected] ~]# echo $MYVAR
Xuwenlong
时间: 2024-11-06 11:38:10

bash中的字符串处理的相关文章

Bash中的字符串变量扩展

1.向尾部方向的最小化删除 (%) $pathname="/usr/bin/local/bin"$echo ${pathname%/bin*}/usr/bin/local 2.向尾部方向的最大化删除(%%) $pathname="/usr/bin/local/bin"$echo ${pathname%%/bin*}/usr 3.向首部方向的最小化删除(#) $pathname=/home/lilliput/jake/.bashrc$echo ${pathname#/

#8 bash变量中的字符串处理

一个完整的程序,一般包括4类文件: 二进制文件(可执行文件).头和库文件.帮助文件.配置文件: bash--CLI(命令行接口)的一种 bash同样属于完整的应用程序,也有这四类文件: bash的配置文件: 三类: profile类: 为交互式登录的shell进程实现功能初始化的配置文件: bashrc类: 为非交互式登录的shell进程实现功能启动配置的配置文件: logout类: 为交互式登录的shell进程提供终止及清理类功能的配置文件: shell的类型: 交互式登录的shell: 1.

bash数组和字符串处理、yum命令详解及编译安装

8月22号主要内容: 一.bash中的数组 二.bash中字符串处理 三.高级变量及配置用户环境 四.yum详解 五.编译安装 一.bash中的数组 1.数组的组成和申明 (1) 数组:存储多个元素的连续的内存空间,相当于多个变量的 集合. (2) 组成:数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式 ,即为关联索引,bash4.0版本之后开始支持. bash的数组支持稀疏格式(索引不连续) (3) 申明数组: declare -a ARRAY

(转载)Bash 中的特殊字符大全

转自:https://linux.cn/article-5657-1.html Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符 号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好,往往能给我们起到事半功倍的效果,为此,特地将Shell里面的一些符号说明罗列成对 照表的形式,以便快速的查找.看看你知道下表中的哪些Shell符号呢? Shell符号及各种解释对照表: Shell符号 使用方法及说明

Linux中bash中的几种基础特性汇总!

首先需要知道什么是shell?如果将Linux内核当作一个地球的核心,那么shell就是地壳.shell本身也是一个应用程序,为我们提供了使用系统的接口.shell程序有很多种,目前主流发行版大多数默认使用bash,其次还有sh,tcsh,csh,fish等,其程序存储在/etc/shells目录下. 由于目前最常用的bash,所以就以bash为例来说一说bash的基础特性,偷偷说一句,其实我也是个新手,其他的shell并未接触,不敢轻易去说,当然本文中难免有错误,还请各位不吝赐教,让大家共同进

shell编程中的字符串的截取方法

shell编程中的字符串的截取方法: 一.Gnu Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr "$a" 1 8 2.echo $a|awk '{print substr(,1,8)}' 3.echo $a|cut -c1-8 4.echo $ 5.expr $a : '\(.\\).*' 6.echo $a|dd bs=1 count=8 2>/dev/null 二.按指定的字符串截取 1.第一种方法: ${varible##*stri

Bash中${}的用法和变量的间接引用

在bash中${}用于设置变量默认值和字符串取值切片以及变量的间接引用,详细用法如下图,在Centos6下字符串取子${STR:POSITON:LENGTH},LENGTH为负数会报错. 1.${VAR},取出变量VAR值 [[email protected] ~]# a=hjks [[email protected] ~]# echo ${a} hjks 2.${VAR:-DEFAULT},VAR没有定义或者为空则输出$DEFAULT的值(VAR不变) [[email protected] ~

Bash 中的 $0 在什么时候不是 argv[0]

每个 C 程序都有一个 main 函数,每个 main 函数都有一个 argv 参数,这个参数是一个字符串数组,这个数组的值是由该 C 程序的父进程在通过 exec* 函数启动它时指定的. 很多人说 Bash 中的 $0 的值就是 bash 这个 C 程序在它的 main 函数中获取到的 argv[0](zeroth argument)的值,我们可以通过 exec 命令的 -a 参数的功能演示一下: $  ( exec -a foo bash -c 'echo $0' ) foo $ ( exe

Linux学习日记--基础命令(7)--bash中的变量,配置文件

变量的定义和使用 变量类型 强类型:定义变量时必须指定类型.参与运算必须符合类型要求:调用未声明变量会产生错误: 弱类型:无须指定类型,默认均为字符型:参与运算会自动进行隐式类型转换:变量无须事先定义可直接调用: 变量命名法则:                1.不能使程序中的保留字:例如if, for;                 2.只能使用数字.字母及下划线,且不能以数字开头:                3.见名知义,         bash中的变量的种类: