pax*_*blo 580
dirname并且basename是您正在寻找的用于提取路径组件的工具:
$ VAR=/home/me/mydir/file.c
$ DIR=$(dirname "${VAR}")
$ echo "${DIR}"
/home/me/mydir
$ basename "${VAR}"
file.c
Run Code Online (Sandbox Code Playgroud)
它们不是内部 Bash命令,但它们是POSIX标准的一部分(参见dirname,basename),因此应该可以在绝大多数将运行Bash的系统上使用.
Emm*_*aux 85
$ export VAR=/home/me/mydir/file.c
$ export DIR=${VAR%/*}
$ echo "${DIR}"
/home/me/mydir
$ echo "${VAR##*/}"
file.c
Run Code Online (Sandbox Code Playgroud)
避免依赖basename和dirname
jer*_*ack 17
在相关的说明中,如果您只有文件名或相对路径,dirname它本身就无济于事.对我来说,答案最终成了readlink.
fname='txtfile'
echo $(dirname "$fname") # output: .
echo $(readlink -f "$fname") # output: /home/me/work/txtfile
Run Code Online (Sandbox Code Playgroud)
然后,您可以将两者合并为一个目录.
echo $(dirname $(readlink -f "$fname")) # output: /home/me/work
Run Code Online (Sandbox Code Playgroud)
如果您关注目标文件是符号链接,首先您可以检查它并获取原始文件.以下if条款可以帮助您.
if [ -h $file ]
then
base=$(dirname $(readlink $file))
else
base=$(dirname $file)
fi
Run Code Online (Sandbox Code Playgroud)
HERE=$(cd $(dirname $BASH_SOURCE) && pwd)
Run Code Online (Sandbox Code Playgroud)
在那里您可以使用new_path =获得完整路径$(dirname ${BASH_SOURCE[0]})。您使用cd new_path更改当前目录,然后运行pwd以获取当前目录的完整路径。
| 归档时间: |
|
| 查看次数: |
365186 次 |
| 最近记录: |