经常看到一些脚本中, 做一些简单的字符串处理/计算字符串长度,也动用管道+ awk/sed/cut等相对重量级工具:),其实大可不必, 因为bash本身就自带一些简单字符串处理功能, 这样至少可以减少重新fork一个进程来做字符串处理的开销, 也算为服务器减排co2做一些贡献吧:)
# 定义几个变量用于测试目的
FILE_NAME="/usr/local/app/world.txt"
TIME_NOW="`date +"%Y%m%d%H%M%S"`"
# 1. 取字符串的子串, 比如说从TIME_NOW分别取出日期和时间
DATE_TODAY="${TIME_NOW:0:8}" # ${var:beg_pos:sub_str_length}, beg_pos是子串的起始位置(从0开始), sub_str_length为子串长度
TIME_TODAY="${TIME_NOW:8:6}"
# 或者
TIME_TODAY="${TIME_NOW:8}" # sub_str_length为0表示到源字符串的结尾
# 取FILE_NAME中的文件名world.txt(不包括路径), 很多童鞋会马上想到basename, 或者一些类似于正则匹配的操作
${FILE_NAME##*/} # 相当于basename ${FILE_NAME},即删除按从左至右,匹配一直到最后一个/之间的子串
${FILE_NAME%/*} # 相当与dirname, 即删除按从右至左方向开始,匹配到第一个/之间的子串
${FILE_NAME#*/} # 从左至右, 删除第一个/及左边的子串
${FILE_NAME%/*} # 从右至左, 删除第一个/及右边的子串
# 2. 字符串替换
${FILE_NAME/world.txt/hello.txt} # 把第一个world.txt替换成hello.txt
${FILE_NAME//a/A} # 把所有的a替换成A
# 3. 计算字符串长度
${#FILE_NAME} # 计算FILE_NAME的长度
ARRAY=(abc defg hijklmn)
${#ARRAY} # 计算这个数组的维数
${#ARRAY[2]} # 计算这个数组第三个元素的长度
对于字符串的处理, 暂时能想到这么一些了, 接触这些东西, 也是因为偶尔会看看操作系统的一些脚本都这样用, 感觉比较专业一些, 自己以前处理一些字符串的时候, 也会用awk/sed加上管道等等, 感觉会略显业余同时确实会在cpu开销上作出一些贡献,虽然只是些许:)
阅读(228) | 评论(0) | 转发(0) |