从文件路径中提取文件名的shell操作

发布时间 2023-09-25 09:52:39作者: 枝桠

Sundray-SW /extdir #sfp=/extdir/debug_bin/ops-devsd
Sundray-SW /extdir #echo ${sfp##*/}
ops-devsd
Sundray-SW /extdir #basename ${sfp}
ops-devsd
Sundray-SW /extdir #dirname ${sfp}
/extdir/debug_bin

 

${ } 的一些特殊功能:
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#/}(不加*号)表示只去掉最左边的/


命令 解释    结果
${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}          获取变量长度                  27