bash{} 方法总结
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
我们可以用 ${ } 分别替换获得不同的值:
- ${file#*/}:拿掉第一条 / 及其左边的字串:dir1/dir2/dir3/my.file.txt
- ${file##*/}:拿掉最后一条 / 及其左边的字串:my.file.txt
- ${file#*.}:拿掉第一个 . 及其左边的字串:file.txt
- ${file##*.}:拿掉最后一个 . 及其左边的字串:txt
- ${file%/*}:拿掉最后一条 / 及其右边的字串:/dir1/dir2/dir3
- ${file%/*}:拿掉第一条 / 及其右边的字串:(空值)
- ${file%.*}:拿掉最后一个 . 及其右边的字串:/dir1/dir2/dir3/my.file
- ${file%%.*}:拿掉第一个 . 及其右边的字串:/dir1/dir2/dir3/my
记忆的方法为:
- # 是去掉左边(在键盘上 # 在 $ 之左边)
- % 是去掉右边(在键盘上 % 在 $ 之右边)
- 单一符号是最小匹配;两个符号是最大匹配。
还可以按下标取指定长度的子串:
- ${file:0:5}:提取最左边的 5 个字?:/dir1
- ${file:5:5}:提取第 5 个字右边的连续 5 个字:/dir2
我们也可以对变量值里的字串作替换:
- ${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt
- ${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my.file.txt
利用 ${ } 还可针对不同的变数状态赋值(没设定、空值、非空值):
- ${file-my.file.txt} :假如 $file 为空值,则使用 my.file.txt 作默认值。(保留没设定及非空值)
- ${file:-my.file.txt} :假如 $file 没有设定或为空值,则使用 my.file.txt 作默认值。 (保留非空值)
- ${file+my.file.txt} :不管 $file 为何值,均使用 my.file.txt 作默认值。 (不保留任何值)
- ${file:+my.file.txt} :除非 $file 为空值,否则使用 my.file.txt 作默认值。 (保留空值)
- ${file=my.file.txt} :若 $file 没设定,则使用 my.file.txt 作默认值,同时将 $file 定义为非空值。 (保留空值及非空值)
- ${file:=my.file.txt} :若 $file 没设定或为空值,则使用 my.file.txt 作默认值,同时将 $file 定义为非空值。 (保留非空值)
- ${file?my.file.txt} :若 $file 没设定,则将 my.file.txt 输出至 STDERR。 (保留空值及非空值))
- ${file:?my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (保留非空值)
还有,${#var} 可计算出变量值的长度:
- ${#file} 可得到 27 ,因为 /dir1/dir2/dir3/my.file.txt 刚好是 27 个字?...
接下来介绍一下 bash 的数组(array)处理方法:
一般而言,A="a b c def" 这样的变量只是将 $A 替换为一个单一的字串,
但是改为 A=(a b c def) ,则是将 $A 定义为数组。
bash 的数组替换方法可参考如下方法:
- ${A[@]} 或 ${A[*]} 可得到 a b c def (全部数组)
- ${A[0]} 可得到 a (第一个数组),${A[1]} 则为第二个数组...
- ${#A[@]} 或 ${#A[*]} 可得到 4 (全部数组数量)
- ${#A[0]} 可得到 1 (即第一个数组(a)的长度),${A[3]} 可得到 3 (第一个数组(def)的长度)
- A[3]=xyz 则是将第 4 个数组重新定义为 xyz ...
一句话总结:bash 很强大!
bash{} 方法总结的更多相关文章
- AIX下安装bash
在AIX系统下,默认是没有安装bash环境的,对于经常操作的维护人员来说,非常不方便,所以下面我们来动手安装bash. 1.确认系统是否已安装bash 方法1:之间敲bash命令,若提示没有此命令则没 ...
- python反转字符串(简单方法)及简单的文件操作示例
Python反转字符串的最简单方法是用切片: >>> a=' >>> print a[::-1] 654321 切片介绍:切片操作符中的第一个数(冒号之前)表示切片 ...
- Shell中判断字符串是否为数字的6种方法分享
#!/bin/bash ## 方法1 a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] &&a ...
- Linux下批量修改文件名方法
对于在Linux中修改文件名的方式一般我们会用mv命令进行修改,但是mv命令是无法处理大量文件修改名称. 但是在处理大量文件的时候该如何进行批量修改呢? 方法一:mv配合for循环方式进行修改 [ro ...
- linux 匹配字符串是否为数字
#!/bin/bash ## 方法1 a=1234;echo "$a"|[ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] &&a ...
- shell 判断字符串是否为数字
本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. #!/ ...
- 我的docker 使用笔记
0 容器启动 docker run image_name(镜像名称) echo "hello word" 1 启动容器 退出后 重新进入 方法一 sudo docker exec ...
- ubuntu dash
缘由:写一些脚本放在/etc/rc.loca自动执行开机启动报错 fiail to start /etc/rc.local 查找资料 缘起:ubuntu在6.0后默认bash改为了dash 导致很多 ...
- shell基本理论知识
(1)查看系统上安装了哪些shell # cat /etc/shells # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash / ...
随机推荐
- magento转移服务器和magento建立多站点总结
magento转移服务器和magento建立多站点总结第一. 我们首先要做的就是把服务器上的magento转移到本地上来.详细步骤:1. 直接用magento的备份系统把网上数据库备份.如图:2. 数 ...
- Magento请求分发与控制器
Magento请求分发与控制器 Magento使用的是MVC结构,模型-试图-控制器结构,这样更好的实现显示逻辑和数据,业务逻辑的分离,更好的适合开发! 下面为传统的mvc结构 URL请求被一个PHP ...
- 转:通过代码理解Asp.net4中的几种ClientIDMode设置.
转:http://www.cnblogs.com/xray2005/archive/2011/07/05/2097881.html 以前我们可以通过ClientID在JavaScript脚本中服务器端 ...
- java apache commons HttpClient发送get和post请求的学习整理(转)
文章转自:http://blog.csdn.net/ambitiontan/archive/2006/01/06/572171.aspx HttpClient 是我最近想研究的东西,以前想过的一些应用 ...
- python---解决“Unable to find vcvarsall.bat”错误
安装某些module时发生常见的 Unable to find vcvarsall.bat 错误 在eddsn找到了“Unable to find vcvarsall.bat” error when ...
- Git常用命令总结(超实用)
导读 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.一般来说,日常使用Git只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整 ...
- Codeforces Round #372 (Div. 2) A B C 水 暴力/模拟 构造
A. Crazy Computer time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- android中的空格及汉字的宽度
在Android布局中进行使用到空格,以便实现文字的对齐.那么在Android中如何表示一个空格呢? 空格: 窄空格: 一个汉字宽度的空格: [用两个空格( )占一个汉字的宽度时,两个空格比 ...
- tyvj1014 - 乘法游戏 ——记忆化搜索DP
题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1014 f[i][j]表示区间[i,j]所得到的最小值. 不断地划分区间,把结果保存起来. #includ ...
- 使用 rqt_console 和 roslaunch---8
使用 rqt_console 和 roslaunch Description: 本教程介绍如何使用rqt_console和rqt_logger_level进行调试,以及如何使用roslaunch同时运 ...