[Linux shell] basename详细说明

basename是一个用于从文件或目录路径中提取基本名称的实用工具。它可以移除路径和文件后缀,或者一次性处理多个路径。在Shell脚本中,basename常用于获取文件名或目录名,例如`basename file_path.sh`将输出文件名。通过`-s`参数可以移除指定后缀,`-a`参数支持处理多个路径,`-z`参数则在输出后不换行。本文提供了多个示例来展示basename的用法。
摘要由CSDN通过智能技术生成

basename

basename命令在shell编程中还是非常实用的。
1.对于文件路径,可以去除文件的路径和文件的后缀输出文件名称。
2.对于目录路径,可以去除目录路径输出目录名称。

参考文档

  1. basename 源代码

https://github.com/coreutils/coreutils

  1. basename 文档

http://www.maizure.org/projects/decoded-gnu-coreutils/

架构图

在这里插入图片描述

例子

1.查看help/version
basename --help
basename --version

在这里插入图片描述

2. basename 不加任何参数选项
basename ~/workspace/shell_command/base_name.sh
basename ~/workspace/shell_command/base_name.sh .sh

输出结果
base_name.sh
base_name

3. 参数选项 -a, --multiple  支持一次处理多个路径字符串,并把基本名称打印到终端
basename -a ~/workspace/shell_command/base_name.sh  ~/workspace/shell_command/hostid_test.sh

输出结果
base_name.sh
hostid_test.sh

对于目录路径的处理

basename -a ~/workspace/shell_command  ~/workspace/shell_command

输出结果
shell_command
shell_command

4. 参数选项 -s, --suffix 移除文件后缀
basename -s .sh base_name.sh
basename -s .sh ~/workspace/shell_command/base_name.sh

输出结果
base_name
base_name

5.参数选项 -z,--zero 在输出处理过的路径字符串后,不输出任何东西。在不加此参数时,会在输出的结果后,会换到下一行。
basename    ~/workspace/shell_command/base_name.sh
basename -z ~/workspace/shell_command/base_name.sh

输出结果
在这里插入图片描述

6.在shell脚本中的使用
#!/bin/bash
declare -a dirname
declare -a filename 
file_path="/home/maobin/workspace/shell_command/hostid_test.sh"
file_path2="/home/maobin/workspace/shell_command/base_name.sh"

dir_path="/home/maobin/workspace/shell_command"
dir_path2="/home/maobin/workspace"

echo "case 1"
filename=`basename $file_path`
echo "filename:${filename}"
dirname=`basename $dir_path`
echo "dirname:${dirname}"
echo -e "\n"

echo "case 2"
filename=`basename -a $file_path $file_path2`
echo "filename: ${filename[@]}"
dirname=`basename -a $dir_path $dir_path2`
echo "dirname:${dirname[@]}"
filename=`basename -z -a $file_path $file_path2`
echo "filename: ${filename[@]}"
echo -e "\n"

echo "case 3"
filename=`basename -s .sh $file_path`
echo "filename:${filename}"
filename=`basename $file_path .sh`
echo "filename:${filename}"
filename=`basename -s .sh -a $file_path $file_path2`
echo "filename: ${filename[@]}"
echo -e "\n"

输出结果
case 1
filename:hostid_test.sh
dirname:shell_command

case 2
filename: hostid_test.sh
base_name.sh
dirname:shell_command
workspace
base_name.sh: line 28: warning: command substitution: ignored null byte in input
filename: hostid_test.shbase_name.sh

case 3
filename:hostid_test
filename:hostid_test
filename: hostid_test
base_name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值