让我们假设这是 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.sh
或bash /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...