Loading... <img class=" lazyloaded" title="1481034980961904.jpg" src="https://www.zsythink.net/wp-content/uploads/ueditor/php/upload/image/20161206/1481034980961904.jpg" alt="bash.jpg" data-src="https://www.zsythink.net/wp-content/uploads/ueditor/php/upload/image/20161206/1481034980961904.jpg" style=""> 之前的文章中,我们提到了shell中常用的字符串处理操作,我们来回顾一下 一、获取变量的长度(字符串长度)。 二、对变量值进行截取(截取字符串)。 三、替换变量值中的某段字符。 四、删除变量值中的某段字符。 五、对变量值进行大小写转换。 六、当变量值为空时,对变量进行一些操作。 前两篇文章中,我们已经总结了上述操作中的前四种操作,今天,我们来介绍一下上述操作的最后两种操作,并将之前的所有总结进行一个汇总,以便以后进行回顾。 <h2 id="wznav_0">字符串大小写转换</h2> 首先,我们准备一个变量,变量值为字母a到z,只不过a到k为小写,L到Z为大写,如下图所示 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_1.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_1.png" style=""> 如果我们想要将变量testvar1中的所有小写英文字母都转换成大写,该怎么办呢?我们可以使用如下方法。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_2.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_2.png" style=""> 如上图所示,只要在输出变量值时加上”^^”即可,”^”为数字键6对应的符号。 如果想要将变量testvar1中的所有大写英文字母都转换成小写,可以使用如下方法。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_3.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_3.png" style=""> 如上图所示,只要在输出变量值时加上”,,”即可将字母中的大写字符转换成小写,很简单吧~ <h2 id="wznav_1">当变量值为空或者非空时对变量进行操作</h2> 在写shell脚本时,我们可能会遇到如下场景。 我们需要判断某个变量是否为空,如果变量值不为空,则使用变量当前的值,如果为空,则赋予变量一个默认值,以便之后进行处理。 那么,在脚本中可能会出现类似如下代码 if [ -z “$testvar” ];then testvar=”test” fi 如上述代码所示,我们使用 if 结构,判断了变量testvar是否为空,如果为空,则将变量赋值为test,当然,如果变量值不为空,那么则不会被赋值,即保持变量原值不变。 其实,我们可以使用更简单的方法,我们只需要一行代码,就可以代替上例中的三行代码,示例如下 ${testvar:=”test”} 没错,就是这么简单,上述代码表示,如果变量testvar的值为空,则将testvar赋值为test,如果不为空,则testvar保持原值不变。我们在命令行中试试上述代码的效果,首先,将变量testvar的值设置为空值,然后使用上述语法,如下。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_4.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_4.png" style=""> 可以看到,当变量为空时,上述语法不仅会将变量的值设置为指定值,同时还会返回对应的值,我们可以直接使用echo命令进行输出,经过上述语法处理后,再次输出变量,变量已经被赋值。 当变量值不为空时,经过上述语法处理后,只会返回变量的原值,并不会改变变量的值,示例如下 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_5.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_5.png" style=""> 可以发现,当变量为空时,使用上述语法会返回我们指定的值,同时还会将变量设定为我们指定的值,其实,还有另外一种方法,能够在变量为空时返回我们指定的值,但是不对变量进行赋值,示例如下。 ${testvar:-“test”} 细心如你一定发现了,与之前的语法相比,只是语法中的”=”替换成了”-” 上述语法表示,如果testvar变量值为空,则返回指定的文本”test”,如果testvar变量值不为空,则返回testvar变量本身的值,但是,当testvar变量值为空时,使用上述语法,只会返回指定的值,并不会对变量进行赋值操作,我们在命令行中看一下效果,示例如下。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_6.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_6.png" style=""> 可以看到,当变量为空时,上述语法并不会对变量赋值,当变量值不为空时,示例如下。 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_7.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_7.png" style=""> 之前的两个示例,都是在变量为空时,返回我们指定的值,那么能不能在变量不为空时,返回我们指定的值呢?必须能的,使用如下语法即可。 ${testvar:+”test”} 上述语法表示,当testvar变量值不为空时,返回指定的字符串”test”,如果变量为空,则返回变量本身的值(即空值),示例如下 <img class="lazyload" src="https://www.zsythink.net/wp-content/themes/zibll/img/thumbnail-lg.svg" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_8.png" style=""> 如上图所示,当变量值不为空时,使用上述语法会返回我们指定的值,但是并不会改变变量原来的值,如果变量值为空,使用上述语法,仍然返回空值,同时也不会对变量进行赋值。 我们还可以在变量为空时,输出bash风格的error_info,示例如下 ${testvar:?”error_info”} 上述语法表示testvar变量为空时,输出bash错误,错误信息为我们指定的字符串error_info 示例如下 <img class=" lazyloaded" src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_9.png" alt="" data-src="https://www.zsythink.net/wp-content/uploads/2017/09/091017_0925_9.png" style=""> <h2 id="wznav_2">总结</h2> 为了方便以后回顾,我们将之前所有与字符串处理、变量处理的相关操作进行汇总,并进行一个总结。 <h3 id="wznav_3">获取字符串长度</h3> <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0"># testvar="12345"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${#testvar}</span></div> </div> <div class=""> <div><span class="enlighter-n1">5</span></div> </div> </div> </div> <h3 id="wznav_4">对变量值进行大小写转换</h3> 将变量值中的小写字母装换为大写 语法:echo ${var^^} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#示例</span></div> </div> <div class=""> <div><span class="enlighter-c0"># testvar="case conversion"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${testvar}</span></div> </div> <div class=""> <div><span class="enlighter-text">case conversion</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${testvar^^}</span></div> </div> <div class=""> <div><span class="enlighter-text">CASE CONVERSION</span></div> </div> </div> </div> 将变量值中的小写字母装换为大写 语法:echo ${var^^} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#示例</span></div> </div> <div class=""> <div><span class="enlighter-c0"># testvar="CASE CONVERSION"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${testvar}</span></div> </div> <div class=""> <div><span class="enlighter-text">CASE CONVERSION</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${testvar,,}</span></div> </div> <div class=""> <div><span class="enlighter-text">case conversion</span></div> </div> </div> </div> <h3 id="wznav_5">当变量值为空或者非空时操作变量</h3> ${var:=value} 上述语法表示如果var为空,则返回value,并将value赋值给var,如果var不为空,则返回var本身的值,var不为空时,var值不会被改变,var为空时,var的值会被设置成指定值。 ${var:-value} 上述语法表示如果var为空,则返回value,如果var不为空,则返回var的值,无论var是否为空,var本身的值不会改变。 ${var:+value} 上述语法表示如果var不为空,则返回value,如果var为空,则返回空值,无论var是否为空,var本身的值不会改变。 ${var:?error_info} 上述语法表示如果var为空,那么在当前终端打印error_info,如果var的值不为空,则返回var的值,无论var是否为空,var本身的值都不会改变。 <h3 id="wznav_6">从指定位置截取字符串,截取到字符串的末尾</h3> #下例表示从正数第4个字符以后开始截取,直到字符串的末尾。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0"># website="www.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website:4}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythink.</span><span class="enlighter-m3">net</span></div> </div> </div> </div> #下例表示从倒数第4个字符开始截取,直到字符串的末尾 #注意:下例中的”负号”与”冒号”之间必须存在任意字符(通常使用0或空格占位),否则无法起到截取字符串的作用。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0"># website="www.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website:0-4}</span></div> </div> <div class=""> <div><span class="enlighter-text">.net</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website: -4}</span></div> </div> <div class=""> <div><span class="enlighter-text">.net</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website:a-4}</span></div> </div> <div class=""> <div><span class="enlighter-text">.net</span></div> </div> </div> </div> <h3 id="wznav_7">从指定位置截取字符串,并且截取指定的长度</h3> #下例表示从正数第4个字符以后开始截取,截取8个字符。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0"># website="www.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website:4:8}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythink</span></div> </div> </div> </div> #下例表示从倒数第9个字符开始截取,截取5个字符。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0"># website="www.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website:0-9:5}</span></div> </div> <div class=""> <div><span class="enlighter-text">think</span></div> </div> </div> </div> ##centos7中,截取长度可以为负数,centos6中不行,centos7中的示例如下 #下例表示从正数第4个字符以后开始截取,截取到字符串的末尾,再将截取后的字符串的最后3个字符删除。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0"># website="www.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website:4:-3}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythink.</span></div> </div> </div> </div> ##centos7中,截取长度可以为负数,centos6中不行,centos7中的示例如下 #下例表示从倒数第4个字符开始截取,截取到字符串的末尾,再将截取后的字符串的最后1个字符删除。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0"># website="www.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website:0-4:-1}</span></div> </div> <div class=""> <div><span class="enlighter-text">.ne</span></div> </div> </div> </div> <h3 id="wznav_8">掐头去尾截取之掐头截取</h3> <strong>掐头截取:删除字符串中从左向右第一个遇到的char,以及其左侧的字符</strong> ##语法:${var#*char} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中从左向右第一个遇到的 "." ,以及其左侧的字符。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># website="www.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website#*.}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythink.</span><span class="enlighter-m3">net</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中从左向右第一个遇到的 "//" ,以及其左侧的字符。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># website="https://ww.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website#*//}</span></div> </div> <div class=""> <div><span class="enlighter-text">ww.</span><span class="enlighter-m3">zsythink</span><span class="enlighter-text">.</span><span class="enlighter-m3">net</span></div> </div> </div> </div> <strong>掐头截取:删除字符串中从左向右最后一个遇到的char,以及其左侧的字符</strong> ##语法:${var##*char} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中从左向右最后一个遇到的 "/" ,以及其左侧的字符。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># website="https://ww.zsythink.net/index.html"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website##*/}</span></div> </div> <div class=""> <div><span class="enlighter-text">index.</span><span class="enlighter-m3">html</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中从左向右最后一个遇到的 "." ,以及其左侧的字符。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># website="www.zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website##*.}</span></div> </div> <div class=""> <div><span class="enlighter-text">net</span></div> </div> </div> </div> <h3 id="wznav_9">掐头去尾截取之去尾截取</h3> <strong>去尾截取:删除字符串中从右向左第一个遇到的char,以及其右侧的字符</strong> ##语法:${var%char*} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中从右向左第一个遇到的 "/" ,以及其右侧的字符。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># testpath="/usr/local/nginx/conf.d"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${testpath%/*}</span></div> </div> <div class=""> <div><span class="enlighter-text">/usr/local/nginx</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中从右向左第一个遇到的 "@" ,以及其右侧的字符。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># testmail="zsy@zsythink.net"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${testmail%@*}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsy</span></div> </div> </div> </div> <strong>去尾截取:删除字符串中从右向左最后一个遇到的char,以及其右侧的字符</strong> ##语法:${var%%char*} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中从右向左最后一个遇到的 "/" ,以及其右侧的字符。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># website="https://ww.zsythink.net/index.html"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${website%%/*}</span></div> </div> <div class=""> <div><span class="enlighter-text">https:</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中从右向左最后一个遇到的 ":" ,以及其右侧的字符。</span></div> </div> <div class=""> <div><span class="enlighter-c0"># testpasswd="root:x:0:0:root:/root:/bin/bash"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${testpasswd%%:*}</span></div> </div> <div class=""> <div><span class="enlighter-text">root</span></div> </div> </div> </div> <h3 id="wznav_10">删除字符串的操作</h3> <strong>删除变量值中第一个遇到的指定字符串</strong> 语法:echo ${var/str} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除变量值中第一个遇到的"@"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy@think@linux"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/@}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythink@linux</span></div> </div> </div> </div> <strong>删除变量值中所有的指定字符串</strong> 语法:echo ${var//str} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中所有的"@"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy@think@linux"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr//@}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythinklinux</span></div> </div> </div> </div> <strong>特殊情况</strong> <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">刚才总结了两种语法</span></div> </div> <div class=""> <div><span class="enlighter-text">语法一:删除变量值中所有的指定字符串的语法为echo $</span><span class="enlighter-g1">{</span><span class="enlighter-text">va</span><span class="enlighter-c0">r//str}</span></div> </div> <div class=""> <div><span class="enlighter-text">语法二:删除变量值中第一个遇到的指定字符串的语法为echo $</span><span class="enlighter-g1">{</span><span class="enlighter-text">var/str</span><span class="enlighter-g1">}</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-text">如果,我们要删除字符串</span><span class="enlighter-s0">"/usr/local/chroot/usr/local"</span><span class="enlighter-text">中第一个遇到的</span><span class="enlighter-s0">"/usr"</span><span class="enlighter-text">,该怎么办呢?</span></div> </div> <div class=""> <div><span class="enlighter-text">正常情况下,我们会套用上述语法二,将语法二中的</span><span class="enlighter-s0">"str"</span><span class="enlighter-text">更改为</span><span class="enlighter-s0">"/usr"</span><span class="enlighter-text">,套用语法二后的命令如下</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="/usr/local/chroot/usr/local/nginx"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr//usr}</span></div> </div> <div class=""> <div><span class="enlighter-text">但是,套用语法二后的命令正好与上述语法一的语法结构相同,所以,本意是删除字符串中第一个遇到的</span><span class="enlighter-s0">"/usr"</span><span class="enlighter-text">,但是最终结果却变为删除字符串中所有的</span><span class="enlighter-s0">"usr"</span><span class="enlighter-text">,执行结果如下</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="/usr/local/chroot/usr/local/nginx"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr//usr}</span></div> </div> <div class=""> <div><span class="enlighter-c0">//local/chroot//local/nginx</span></div> </div> <div class=""> <div><span class="enlighter-text">聪明如你一定想到了,这种情况需要对</span><span class="enlighter-s0">"/"</span><span class="enlighter-text">进行转义,示例如下</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="/usr/local/chroot/usr/local/nginx"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/\/usr}</span></div> </div> <div class=""> <div><span class="enlighter-text">/local/chroot/usr/local/nginx</span></div> </div> </div> </div> <strong>删除变量值中位于行首的指定字符串</strong> 语法:echo ${var/#str} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中行首的"H"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="H.H.H.H.H.H"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/#H}</span></div> </div> <div class=""> <div><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.H</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中行首的"#"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="#zsy#think#linux"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/##}</span></div> </div> <div class=""> <div><span class="enlighter-text">zs</span><span class="enlighter-c0">y#think#linux</span></div> </div> </div> </div> <strong>特殊情况</strong> <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">参考之前的特殊情况,即可发现,由于删除字符串中行首的字符时需要使用语法</span><span class="enlighter-s0">"/#"</span><span class="enlighter-text">,所以如果想要删除字符串中第一个遇到的</span><span class="enlighter-s0">"#"</span><span class="enlighter-text">时,则不能使用</span><span class="enlighter-s0">"/#"</span><span class="enlighter-text">,需要对</span><span class="enlighter-s0">"#"</span><span class="enlighter-text">进行转义,示例如下,删除字符串中第一个遇到的</span><span class="enlighter-s0">"#"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy#think#linux"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/\#}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythin</span><span class="enlighter-c0">k#linux</span></div> </div> </div> </div> <strong>删除变量值中位于行尾的指定字符串</strong> 语法:echo ${var/%str} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中行尾的"H"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="H.H.H.H.H.H"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/%H}</span></div> </div> <div class=""> <div><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.</span><span class="enlighter-m3">H</span><span class="enlighter-text">.H.</span></div> </div> <div class=""> <div></div> </div> <div class=""> <div><span class="enlighter-c0">#下例表示删除字符串中行尾的"%"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy%think%linux%"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/%%}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsy%think%linux</span></div> </div> </div> </div> <strong>特殊情况</strong> <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">参考之前的特殊情况,即可发现,由于删除字符串中行尾的字符时需要使用语法</span><span class="enlighter-s0">"/%"</span><span class="enlighter-text">,所以如果想要删除字符串中第一个遇到的</span><span class="enlighter-s0">"%"</span><span class="enlighter-text">时,则不能使用</span><span class="enlighter-s0">"/%"</span><span class="enlighter-text">,需要对</span><span class="enlighter-s0">"%"</span><span class="enlighter-text">进行转义</span></div> </div> <div class=""> <div><span class="enlighter-c0">#示例如下,删除字符串中第一个遇到的"%"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="zsy%think%linux%"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/\%}</span></div> </div> <div class=""> <div><span class="enlighter-text">zsythink%linux%</span></div> </div> </div> </div> <h3 id="wznav_11">替换字符串的操作</h3> <strong>将变量值中第一个遇到的str1替换成str2</strong> 语法:echo ${var/str1/str2} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示将字符串中第一个遇到的"w"替换成"abc"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="www"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/w/abc}</span></div> </div> <div class=""> <div><span class="enlighter-text">abcww</span></div> </div> </div> </div> <strong>将变量值中所有的str1替换成str2</strong> 语法:echo ${var//str1/str2} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示将字符串中所有"w"替换成"abc"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="www"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr//w/abc}</span></div> </div> <div class=""> <div><span class="enlighter-text">abcabcabc</span></div> </div> </div> </div> <strong>特殊情况</strong> <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">某些情况下需要进行转义,参考</span><span class="enlighter-s0">"删除字符串操作"</span><span class="enlighter-text">总结部分的特殊情况。</span></div> </div> </div> </div> <strong>将变量值中位于行首的str1替换成str2</strong> 语法:echo ${var/#str1/str2} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示将字符串中位于行首的abc替换成123</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="abcdefabc666abc888abc"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/#abc/123}</span></div> </div> <div class=""> <div><span class="enlighter-text">123defabc666abc888abc</span></div> </div> </div> </div> <strong>特殊情况</strong> <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">某些情况下需要</span><span class="enlighter-c0">对#号进行转义,参考"删除字符串操作"总结部分的特殊情况。</span></div> </div> </div> </div> <strong>将变量值中位于行尾的str1替换成str2</strong> 语法:echo ${var/%str1/str2} <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-c0">#下例表示将字符串中位于行尾的abc替换成666</span></div> </div> <div class=""> <div><span class="enlighter-c0"># teststr="abcdefabc666abc888abc"</span></div> </div> <div class=""> <div><span class="enlighter-c0"># echo ${teststr/%abc/666}</span></div> </div> <div class=""> <div><span class="enlighter-text">abcdefabc666abc888666</span></div> </div> </div> </div> <strong>特殊情况</strong> <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">某些情况下需要对%号进行转义,参考</span><span class="enlighter-s0">"删除字符串操作"</span><span class="enlighter-text">总结部分的特殊情况。</span></div> </div> </div> </div> 好了,关于变量操作、字符串操作就总结到这里,希望这篇文章能够对你有所帮助。 转载自朱双印日志https://www.zsythink.net/archives/2311 Last modification:May 29, 2024 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏