感悟网 导航

Shell脚本:${...}在字符串中的多种用法

作者&投稿:旁峰 (若有异议请与网页底部的电邮联系)
~ 1、${var}

限定变量。

如果一个变量名A是另一个变量名AB的前部分,那么,如果要在AB相连时,要得到A的值,就必须使用${var}限定。

如果变量名不会产生歧义时(即独立的变量名),${var}与$var没有任何区别。

var="hello"

var_01="hello01"

echo  $var $var_01 ${var}_01

>>> hello hello01 hello_01

2、${#var}

得到变量var的长度

var="hello"

echo ${#var}

>>> 5

3、${var#}

删除变量首部的字符(串),

"#"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

var="hello"

echo ${var#he}

>>> llo

var="/res_pos/path/from/something"

echo ${var#/}

>>> res_pos/path/from/something    # 删除第一个"/"

echo ${var#/*/}

>>> path/from/something  # 删除首部匹配"/*/"的串,即"/res_pos/"

4、${var##}

删除变量首部的字符(串),

只是,当使用2个"##"时,匹配是贪婪的(贪婪匹配,也就是尽可能多的匹配)。

echo ${var##/*/}

>>> something  # 删除首部匹配"/*/"的串,即"/res_pos/path/from/"。

5、${var%}

删除变量尾部的字符(串),

"%"后面的可以是字面串,也可以是正则表达式(惰性匹配)。

var="hello"

echo ${var%llo}

>>> he

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~/res_pos/path/from    # 删除尾部的"/something"

6、${var%%}

删除变量尾部的字符(串),

只是,当使用2个"%%"时,匹配是贪婪的(对应于第4条)

var="~/res_pos/path/from/something"

echo ${var%/*}

>>> ~    # 删除第一个的"/"后的所有所有内容(包括"/"),贪婪匹配中,"/*"就是"/"后的所有字符串

7、${var::}

跟python的切片概念相似,取变量var的起始索引,

指定长度的子串(${var:索引:长度})。

var="~/res_pos/path/from/something"

echo ${var:0:5}

>>> ~/res

echo ${var:1:5}

>>> /res_      # 可见,字符串的索引是从0开始的

echo ${var::5}

>>> ~/res      # 省略"索引",默认为从0开始

echo ${var:1:}

>>>              # 省略"长度",默认长度为0,所以输出为空

8、${var//}

字符串替换。

将var中的字符串A替换成字符串B(${var/A/B})。

var="hello world"

echo ${var/hello/hi}

>>> hi world      # 字符串"hello"替换成了"hi"

echo ${var/l/X}

>>> heXlo world  # 第一个"l"替换成了"X"

9、${var///}

字符串替换,

与第8点相同,只不过,现在是将所有出现的串A替换成串B(${var//A/B})。

var="hello world"

echo ${var//l/X}

>>> heXXo worXd  # 所有的"l"都替换成了"X"

10、${var/#/}

替换字符串首部的串A为串B,

(${var/#A/B}),与第8点不同的是,这里只替换首部的串A。

var="hello world. hello baby."

echo ${var//h/H}

>>> Hello world. Hello baby.    # 将所有"h"替换成了"H"

echo ${var/#h/H}

>>> Hello world. hello baby.    # 将首部的"h"替换成了"H"

echo ${var/e/E}

>>> hEllo world. hello baby.    # 将第一个出现的"e"替换成了"E"

echo ${var/#e/E}

>>> hello world. hello baby.    # 首字符不是"e",所以没有进行任何替换,原样输出。

11、${var/%/}

替换字符串尾部的串A为串B,

(${var/%A/B}),与第10点相似,只是这是处理的是字符串尾。

var="hello hello"

echo ${var/%o/END}

>>> hello hellEND    # 将尾部的字符"o",替换成了"END"。

《Shell脚本:${...}在字符串中的多种用法》
答:1、${var} 限定变量。如果一个变量名A是另一个变量名AB的前部分,那么,如果要在AB相连时,要得到A的值,就必须使用${var}限定。如果变量名不会产生歧义时(即独立的变量名),${var}与$var没有任何区别。var="hello"var_01="hello01"echo  $var $var_01 ${var}_01 >>> hello ...

《linux shell脚本怎么在匹配字符前添加字符》
答:a="1234567"a=A${a} echo $a 看错 稍等 这样 a=歌华FX123123 echo $a|sed 's/[a-zA-Z0-9]/A&/'如果需要存入变量 a=$(echo $a|sed 's/[a-zA-Z0-9]/A&/')

《shell脚本实现字符自加》
答:如果想要在变量后面添加一个字符,可以用一下方法:复制代码 代码如下:value1=home value2=${value1}"="echo $value2 把要添加的字符串变量添加{},并且需要把$放到外面。这样输出的结果是:home=,也就是说连接成功。又如:复制代码 代码如下:[root@localhost sh]# var1=/etc/ [root@localhost...

《Linux shell脚本中连接字符串的方法》
答:这篇文章主要介绍了Linux shell脚本中连接字符串的方法,大家参考使用吧 如果想要在变量后面添加一个字符,可以用一下方法:代码如下:value1=home value2=${value1}"="echo $value2 把要添加的字符串变量添加{},并且需要把$放到外面。这样输出的结果是:home=,也就是说连接成功。又如:...

《shell中${}的使用》
答:在shell中经常要对变量进行字符串的截取操作,虽然截取字符串的方法很多,在这里用${}的方法操作变量应该是最简洁的方式。shell脚本中经常要对输入的参数截取其路径或文件名,例如变量file中保存着输入参数:这里的最大匹配和最小匹配与正则表达式是不是很像,但是用起来简单方便。如果觉得不方便记忆,可以...

《如何用Shell脚本往文本文件里写入一些字符串?》
答:1、Shell Script ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。2、换一种说法也就是,...

《linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单...》
答:1)读取参数 读取输入的参数的变量为位置参数,位置参数通过标准数字表示,其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。shell脚本自动将命令行参数赋值给各个位置变量。同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,...

《如何编写一个shell脚本》
答:在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 常用命令语法及功能 echo "some text": 将文字内容打印在屏幕上 ls: 文件列表 wc –l filewc -w filewc -c file: 计算文件行数计算文件中的...

《shell 脚本里面从一个文本里面读出一个数字,如何转换成整数?我需要用这...》
答:可以参考下面几种方法:法一:echo ${var%.*} #这个是直接去除小数点及后面所有内容,只用于bash 法二:echo $var | awk -F. '{print $1}' #以小数点为分隔符取第一个字段 法三:echo $var | awk '{print int($0)}' #awk中可直接使用C函数取整 ...

《linux shell脚本,如何用星号 输出"李"这个字?》
答:那么你需要的shell脚本为:echo ' *'echo ' * *'echo ' ***'echo ' *'echo ' * * *'echo ' * * **'echo ' ** * ***'echo '** * *'echo ' ***'echo ' *'echo ' ** *'echo ' ***'echo ' *'echo ' *'echo...

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网