这段代码在bash中做什么?

这段代码在bash中做什么?,bash,shell,conditional,variable-expansion,Bash,Shell,Conditional,Variable Expansion,我正试图修改别人的脚本,其中有一部分让我很困惑。它看起来像下面 if [[ ! -f "${0%/*}/somefile" ]]; then echo "Cannot find somefile, quiting..." >&2 exit 1 else source "${0%/*}/somefile" fi 我知道它正在检查文件是否存在,并使用此代码${0%/*}尝试获取当前目录,但它不为我运行。我修复它的方法是用工作得更好的pwd替换它 我只是想知道是

我正试图修改别人的脚本,其中有一部分让我很困惑。它看起来像下面

if [[ ! -f "${0%/*}/somefile" ]]; then
    echo "Cannot find somefile, quiting..." >&2
    exit 1
else
    source "${0%/*}/somefile"
fi
我知道它正在检查文件是否存在,并使用此代码
${0%/*}
尝试获取当前目录,但它不为我运行。我修复它的方法是用工作得更好的
pwd
替换它


我只是想知道是否有人可以向我详细说明代码的那部分
${0%/*}
试图做什么?

它不是试图获取当前目录,而是试图获取包含脚本的目录
$0
是脚本的名称,
%/*
修饰符将删除其中最后一个
/
中的所有内容


此脚本希望
somefile
存在于脚本安装所在的同一目录中,而不是您当前的目录中。

噢,哇,我现在觉得很愚蠢。谢谢你在这方面的扩展,现在更清楚了。然而,有什么理由它不起作用吗?它没有返回任何错误,somefile与它位于同一目录中,但它仍然始终返回“找不到somefile,正在退出…”尝试将
set-x
放在脚本顶部。这将使它在执行时显示每一行,并扩展变量。
if
行显示了什么?实际上,似乎是名称有问题,编写它的人不小心用逗号替换了somefile名称中的句点。