这个代码在bash中做了什么?

时间:2013-12-28 02:18:37

标签: 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替换它,效果要好得多。

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

1 个答案:

答案 0 :(得分:2)

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

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