如何将pwd与basename拼接并将路径和文件名赋值给变量?
拼接当前路径与文件名并赋值给变量的几种方法
嘿,这问题我熟!在Shell环境(不管是终端直接输入还是写脚本)里实现这个需求有好几种实用的方式,我给你拆解一下:
方法1:直接用命令替换拼接(最通用)
如果是要把当前工作目录和某个指定文件名拼接成完整绝对路径,直接用pwd和basename的输出组合就行,记得用双引号包裹避免空格/特殊字符坑:
# 示例:拼接当前目录下的file.txt full_path="$(pwd)/$(basename "file.txt")" # 如果是要获取当前运行脚本自身的完整路径,用$0代替文件名 full_path="$(pwd)/$(basename "$0")"
解释一下:$(pwd)会输出当前所在目录的绝对路径,$(basename "文件名")会提取纯文件名部分,两者用/拼接后赋值给full_path变量。
方法2:用realpath/readlink一键搞定(更省心)
如果你的系统支持realpath或者readlink命令(大部分主流Linux发行版默认都有),可以直接一步获取文件的完整绝对路径,连拼接都省了:
# 获取指定文件的完整路径 full_path=$(realpath "file.txt") # 获取当前脚本自身的完整路径(包括处理软链接的真实路径) full_path=$(readlink -f "$0")
这个方法的好处是自动处理相对路径、软链接等场景,不用手动拼接,非常省事。
方法3:结合参数扩展处理已有路径
如果你已经有一个文件的相对/绝对路径(比如./docs/report.pdf),可以先拆分目录和文件名再拼接:
file_path="./docs/report.pdf" # 提取目录部分 dir_name=$(dirname "$file_path") # 提取文件名部分 file_name=$(basename "$file_path") # 拼接成完整路径(如果dir_name是相对路径,可结合pwd转绝对路径) full_path="$(pwd)/${file_name}"
重要注意事项
- 所有涉及文件名/路径的地方一定要加双引号!不然遇到文件名含空格、
*、?这类特殊字符时,Shell会把它们当成分隔符或者通配符,导致结果出错。 - 如果是在脚本里使用,优先考虑
realpath/readlink,能避免很多路径相关的坑。
内容的提问来源于stack exchange,提问作者Omar BISTAMI
相关产品推荐
相关产品推荐

