如标题所述,我需要确定当程序运行时路径是相对路径还是绝对路径:
./program #relative
dir/dir2/program #relative
~User/dir/dir2/program #absolute
/home/User/dir/dir2/program #absolute
这是我的测试用例。我该如何在 shell 程序中实现这个功能?
更一般地说,如何检查一个路径(在这种情况下是 $0
)是相对路径还是绝对路径?
if [[ "$0" = /* ]]
then
: # Absolute path
else
: # Relative path
fi
[
,我必须转义星号。使用 ((
,星号将完全停止工作。关键是,您不想将星号与根目录中恰好存在的文件匹配;您想将其与等于运算符的另一个参数匹配。 - Jirka Hanika==
)进行比较,因为单等号被赋值操作符占用。这个问题可能需要一个更具体的标签。 - Jirka Hanika通用解决方案适用于任何$path
,而不仅仅是$0
[ "$path" != "${path#/}" ] && echo "absolute" || echo "relative"
case "$directory" in
/*)
echo "absolute"
;;
*)
echo "relative"
;;
esac
if [ ${path:0:1} == / ]
then
echo Absolute path
else
echo Non-absolute path
fi
~
,因此您只需检查是否存在前导/
。 - user123444555621./〜User
中的相对路径 - 如果这不是您的意思,则引用完全是一个红鲱。 - tripleee