求简洁可读的Bash脚本函数:替换绝对路径中的文件名
Bash函数:替换绝对路径中的文件名
没问题,这里有一个简洁、可读性强且安全的Bash函数,完美匹配你替换绝对路径文件名的需求:
replace_filename() { # 检查参数数量是否合法 if [ $# -ne 2 ]; then echo "错误:请传入两个参数——绝对路径 和 新文件名" >&2 return 1 fi # 定义局部变量,避免污染全局环境 local original_path="$1" local new_filename="$2" # 验证输入的路径确实是绝对路径 if [[ ! "$original_path" =~ ^/ ]]; then echo "错误:第一个参数必须是绝对路径(以/开头)" >&2 return 1 fi # 提取原路径的目录部分,拼接新文件名 local directory=$(dirname "$original_path") local new_path="${directory}/${new_filename}" # 返回最终的新绝对路径 echo "$new_path" return 0 }
函数说明
- 参数校验:先检查是否传入了恰好两个参数,避免无效调用;同时验证第一个参数是绝对路径,符合你的输入要求
- 局部变量:用
local声明变量,确保函数不会意外修改全局变量 - 安全处理:所有路径和文件名都用双引号包裹,能正确处理包含空格、特殊字符的文件名(比如
my file.txt) - 核心逻辑:用
dirname工具提取原路径的目录部分,再和新文件名拼接,不管原路径指向的是文件还是目录都能正常工作
示例用法
直接调用函数查看结果:
replace_filename "/home/user/tmp/data/sample1.txt" "extended_sample.dat"
输出结果:
/home/user/tmp/data/extended_sample.dat
如果需要把结果保存到变量中后续使用:
result_path=$(replace_filename "/home/user/tmp/data/sample1.txt" "extended_sample.dat") echo "新路径:$result_path"
内容的提问来源于stack exchange,提问作者NoMoreMrNiceGaius
相关产品推荐
相关产品推荐

