linux shell编程学习--字符串的使用和操作

来源:互联网 发布:软件工程推荐书籍知乎 编辑:程序博客网 时间:2024/05/19 16:19

在bash shell的使用过程中,经常会遇到一些字符串string的操作,下面是个人的一些使用总结。

一、字符串的定义

用双引号,单引号,或者直接在接在=后,都可以定义一个字符串,如下,定义了三个字符串

str1="this is a string" str2='this is a string'str3=this_is

但双引号和单引号,在bash中还是有区别的。
单引号引用,则保留字符串的所有字符的字面含义,同时,单引号内不允许再出现单引号,也不会对转义字符等进行转义。
双引号引用,则支持一些扩展,如$(美元符) \ (反斜杠)。\$可以引用后面的变量值,\(反斜杠)表示转义。如下:

str="test_sting."echo "\\$str" #输出结果为:\test_stringecho '\\$str' #输出结果为:\\$str

二、求字符串长度

str="test_string"echo ${#str} #得到长度9

三、字符串比较

bash shell中的字符串可以进行,大于,小于,等于,判断是否为空,是否有值等操作。在相等的操作中,支持正则匹配。具体语法如下:

操作符 含义 举例 < 小于 [[ "1" < "2" ]] #true ASCII 字母顺序 > 大于 [[ "2" > "1" ]] #true ASCII 字母顺序 == 等于(支持模式匹配) [[ "aa" == "aa" ]] #true [[ "aaa" == a* ]] #true 模式匹配模式匹配的时候,不能加双引号 = 等于,与==等价 =~ 判断字串 [[ "aa" =~ "a" ]] #true != 不等于 [[ "a" != "b" ]] #true -z 是否为空 [[ -z ""]] #true -n 是否非空 [[ -n "a" ]] #true

bash shell中在比较字符串的时候,一般最好用”(双引号)将值包含起来,避免空格的影响。但在使用d**==(模式匹配)**的时候,则不能使用双引号

四、字符串的截断

可以使用#,##,%,%%等符号进行字符串的截断操作。bash shell的字符串支持四种截断方式,可以截断左边字符或者截断右边字符。
假设有字符串str

str="This-is-a-test-string"
操作符 含义 举例 # # 号截取,从左边截取掉最短的匹配,保留右边字符。 echo ${str#*-} #得到is-a-test-string ## ##号截取,从左边截取掉最长的匹配,保留右边字符 echo ${str##*-} #得到string % %截取,从右边截取最短的匹配,保留左边字符 echo ${str%-*} #得到This-is-a-test %% %%截取,从右边截取最长的匹配,保留左边字符 echo ${str%%-*} #得到This

五、字符串的截取

shell字符串支持任意位置的子串截取。语法为:
${org_string:pos:length} 截取从pos开始的length长度的子串
${org_string:pos:-length} 截取从pos开始,截取到距字符串结束的length长度的位置的子串
${org_string:(-pos):length} 从距离字符串结束的pos位置开始,截取length长度的子串
${org_string:(-pos):-length} 从距离字符串结束的pos位置开始,截取到距字符串结束的length长度的位置的子串
${org_string:pos}截取从pos开始到字符串结束
${org_string:(-pos)}从距离字符串结束的pos位置开始,截取到字符串结束
具体用法,如下:

org_str="This-is-a-test-test-string"echo ${org_str:0:4} #得到 Thisecho ${org_str:0:-4} #得到 This-is-a-test-test-stecho ${org_str:(-11):4} #得到 testecho ${org_str:(-11):-4} #得到 testecho ${org_str:4} #得到 -is-a-test-test-stringecho ${org_str(-6)} #得到 string

六、字符串的替换

在bash shell的字符串中,可以使用新的字符串替换旧字符串中的子串。
假设有字符串org_str

org_str="This-is-a-test-test-string"

具体用法,如下表:

表达式 含义 举例 ${org_str/sub_str/replace_str} 使用$replace_str的值来替换第一个匹配的$sub_str ${org_str/test/TEST} #得到This-is-a-TEST-test-string ${org_str//sub_str/replace_str} 使用$replace_str的值来替换全部匹配的$sub_str ${org_str//test/TEST} #得到This-is-a-TEST-TEST-string ${org_str/#sub_str/replace_str} 如果$org_str是以$sub_str开始,使用$replace_str的值来替换$sub_str ${org_str/#This/THIS} #得到THIS-is-a-test-test-string ${org_str/%sub_str/replace_str} 如果$org_str是以$sub_str结束,使用$replace_str的值来替换$sub_str ${org_str/%string/STRING} #得到This-is-a-test-test-STRING
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我的世界未响应怎么办 我的世界不会玩怎么办 我的世界天黑了怎么办 阿里云上传不上怎么办 vultr ip被墙了怎么办 油蜡牛皮包脏了怎么办 客人丢了车钥匙怎么办 1号店怎么打不开怎么办 手机中了呼死你怎么办 银行卡u盾丢了怎么办 空军一号皮裂了怎么办 跑步跑的脚腕疼怎么办 走路多了脚腕疼怎么办 白鞋子洗了发黄怎么办 来大姨妈腰疼怎么办 绒面长筒靴掉筒怎么办 钢铁雄心4很卡怎么办 点透视点在纸外怎么办 被新浪微博屏蔽怎么办 孩子痰多鼻涕多怎么办 感冒痰多鼻涕多怎么办 最近鼻涕和痰多怎么办 鼻涕痰多怎么办没感冒 一岁宝宝痰多怎么办 小孩鼻涕和痰多怎么办 鼻子老长鼻屎要怎么办 眼睛老有眼屎是怎么办 眼睛有干眼屎是怎么办 小孩流黄鼻涕是怎么办 孕妇9个月流鼻涕怎么办 流黄鼻涕两周了怎么办 大人流黄脓鼻涕怎么办 鼻子一直流鼻涕像水一样怎么办 6个月婴儿流鼻涕怎么办 9个月婴儿流鼻涕怎么办 狗狗晕车吐了怎么办 小狗又拉又吐怎么办 犬瘟热流黄鼻涕怎么办 2个月幼犬流鼻涕怎么办 5个月宝宝流鼻血怎么办 1岁宝宝感冒鼻塞怎么办