1. $() - 命令执行结果替换
用于做命令替换,将$()
替换为执行结果
1.1 命令替换:
echo Today $(echo is $(date "+%Y-%m-%d"))
- 执行
$(date "+%Y-%m-%d")
括号中的date "+%Y-%m-%d"
,结果为2020-05-01
- 替换
$(date "+%Y-%m-%d")
为执行结果2020-05-01
,命令还剩下echo Today $(echo is 2020-05-01)
- 同理执行
$(echo is 2020-05-01)
并替换,命令还剩下echo Today is 2020-05-01
- 最终输出
Today is 2020-05-01
在 bash 中 ``(反引号)和 $() 具有相同的结果,前者优点支持所有类 Unix 系统,后者优点是比较直观。
2. ${}变量替换
$VAR 和 ${VAR} 效果相同,后者可以精确的标识替换范围
2.1-基本变量替换:
msg=beautiful
echo you are ${msg}
you are beautiful #输出结果
2.2-按照索引值取子串
file=/dir1/dir2/dir3/my.file.txt
命令 解释 结果
${file:0:5} 提取最左边的 5 个字节 /dir1
${file:5:5} 提取第 5 个字节右边的连续 5 个字节 /dir2
2.3 -查找替换:
file=/dir1/dir2/dir3/my.file.txt
命令 解释 结果
${file/dir/path} 将第一个 dir 提换为 path /path1/dir2/dir3/my.file.txt
${file//dir/path} 将全部 dir 提换为 path /path1/path2/path3/my.file.txt
2.4-按照路径取文件名
命令 解释 结果
${file##*/} 拿掉最后一条 / 及其左边的字符串 my.file.txt
#
是去掉左边(在键盘上 # 在 $ 之左边)
%
是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配
*
是用来匹配不要的字符,也就是想要去掉的那部分
还有指定字符分隔号,与*
配合,决定取哪部分
3. (())重新定义变量值
echo $((2#110))
6
((2#110))
2代表2进制,110为2进制表示的值,因此echo $6
最终输出6
参考文章:
- Linux—shell中 ( ( ) ) 、 (( ))、 (())、( )、``与${ }的区别:https://www.cnblogs.com/chengd/p/7803664.html