Bash中的字符串截取
来源:互联网 发布:全职高手烽火知韩txt 编辑:程序博客网 时间:2024/05/20 22:30
看到这样一句脚本
APP_NAME="${0##*[\\/]}"
起初不知道什么意思, 后来才发现, 这是在截取文件名.
假如我们的脚本叫test.sh
:
#!/bin/bashappName="${0##*[\\/]}"echo $appName
那么:
# 以相对路径运行[root@localhost Downloads]# ./test.sh test.sh# 以绝对路径运行[root@localhost Downloads]# /root/Downloads/test.sh test.sh
那么为什么${0##*[\\/]}
可以截取到文件名呢?
这就要说下bash中的子串截取规则了:
那么对于${0##*[\\/]}
而言, 就是取$0
(也就是键入的脚本名, 无论以什么路径),
删除从开始 到最后一个/
或者\
, 也就是只留文件名, 不留路径, 即上述输出的test.sh
.
事实上写成${0##*/}
也可以.
那么来做个实验, 验证下上述表格中的观点:
# 定义字符串testStr[root@localhost Downloads]# testStr=0123abc456789abcdef.xyz# 从左往右, 删除0123abc[root@localhost Downloads]# echo ${testStr#*abc}456789abcdef.xyz# 从左往右, 删除0123abc456789abc[root@localhost Downloads]# echo ${testStr##*abc}def.xyz# 从右往左, 删除abcdef.xyz[root@localhost Downloads]# echo ${testStr%abc*}0123abc456789# 从右往左, 删除abc456789abcdef.xyz[root@localhost Downloads]# echo ${testStr%%abc*}0123[root@localhost Downloads]#
还有一种按索引和长度截取的方法: ${varible:startIndex:len}
, 类似于js中的substr方法:
[root@localhost Downloads]# testStr=123abc456# 从索引2开始, 取3个字符[root@localhost Downloads]# echo ${testStr:2:3}3ab
参考:
http://blog.csdn.net/finewings/article/details/5718133
欢迎补充指正!
阅读全文
0 0
- Bash中的字符串截取
- Bash中的字符串截取
- bash字符串截取
- bash字符串截取
- Shell(Bash) - 文件名.字符串截取
- bash shell字符串的截取
- bash shell字符串的截取
- [Linux]:bash shell字符串的截取
- C#中的字符串截取
- BASH 中的字符串处理
- BASH 中的字符串处理
- BASH 中的字符串处理
- bash中的字符串操作
- BASH 中的字符串处理
- BASH 中的字符串处理
- BASH 中的字符串处理
- BASH 中的字符串处理
- Bash中的字符串处理
- fastJson解析多层Json数据案例
- 动画封装小案例
- NameError: global name 'render_template' is not defined(关键词:flask/bug)
- Linux下搭建Apache服务器
- HashMap
- Bash中的字符串截取
- 优秀的开源c项目
- C++高效编程忠告
- think in java 阅读笔记(类的加载和实例化)
- 算法入门经典第二版 3-3 Digit Counting
- 机器学习:Selective Search for Object Recognition
- Effective Java:类和接口的设计
- SpringCloud项目生成Jar包执行
- 免锁容器之CopyOnWriteArrayList、ConcurrentHashMap