Linux 学习笔记: shell中${} 的用法,删除&替换
字符串的删除
echo${i##*/} 删除 / 前的所有内容
## 删除
tt=$i
echo{tt:22} #取的22位以后的所有字符
file=/dir1/dir2/dir3/my.file.txt
\(<span class="token punctuation">{<!-- --></span>file<span class="token comment">#*/}:删掉第一个/ 及其左边的字符串:dir1/dir2/dir3/my.file.txt</span>
\){file##/}:删掉最后一个/ 及其左边的字符串:my.file.txt
\(<span class="token punctuation">{<!-- --></span>file<span class="token comment">#*.}:删掉第一个. 及其左边的字符串:file.txt</span>
\){file##.}:删掉最后一个. 及其左边的字符串:txt
\({file%/*}</span>:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
<span class="token variable">\){file%%/}:删掉第一个/ 及其右边的字符串:(空值)
\({file%.*}</span>:删掉最后一个 <span class="token keyword">.</span> 及其右边的字符串:/dir1/dir2/dir3/my.file
<span class="token variable">\){file%%.}:删掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
取子串及替换
\({file:0:5}</span>:提取最左边的5 个字节:/dir1
<span class="token variable">\){file:5:5}:提取第5 个字节右边的连续5个字节:/dir2
也可以对变量值里的字符串作替换:
\({file/dir/path}</span>:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
<span class="token variable">\){file//dir/path}:将全部dir 替换为path:/path1/path2/path3/my.file.txt
\({#var}</span> 可计算出变量值的长度:
<span class="token variable">\){#file} 可得到27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节