为什么"${0%/*}"在我的机器上无法按预期工作?



让我们假设这是 test.sh

#!/bin/bash
if [ -f "file.sh" ]; then
echo "File found!" # it will hit this line
else
echo "File not found!"
fi
if [ -f "${0%/*}/file.sh" ]; then
echo "File found!"
else
echo "File not found!" # it will hit this line
fi

并且 file.sh 存在于 test.sh 旁边的同一文件夹中 输出将是

+ '[' -f file.sh ']'
+ echo 'File found!'
File found!
+ '[' -f test.sh/file.sh ']'
+ echo 'File not found!'
File not found!

我缺少一些设置吗?

这取决于你如何称呼test.sh

如果您将其称为./test.sh/path/to/test.sh,则
$0将分别./test.sh/path/to/test.sh${0%/*}
将分别./path/to

如果您将其称为bash ./test.shbash /path/to/test.sh,则
$0将分别./test.sh/path/to/test.sh${0%/*}
将分别./path/to

上述情况将起作用。

但是,如果您将其称为cd /path/to; bash test.sh,那么$0将被test.sh.

${0%/*}将从/中删除所有内容。您的$0没有任何/。因此,它将保持不变。${0%/*}等于test.sh.
因此,${0%/*}/foo.sh将被视为不存在。

您可以使用dirname "$0"也可以使用以下琐碎逻辑:

mydir=${0%/*}
[ "$mydir" == "$0" ] && mydir=.
if [ -f "$mydir/file.sh" ]; then
#... whatever you want to do later...

相关内容

  • 没有找到相关文章

最新更新