bash 的奇怪之处不是运算符

发布于 2024-09-25 07:51:36 字数 451 浏览 4 评论 0原文

我正在尝试确定文件或目录是否不存在。我尝试了以下命令来查看文件是否存在并且它们正常工作:

if [ -a 'settings.py' ]; then echo 'exists'; fi
exists #output
if [ -a 'foo' ]; then echo 'exists'; fi #outputs nothing

但是当我尝试这样做时:

if [ ! -a 'settings.py' ]; then echo 'does not exist'; fi
does not exist #shouldn't be output since the file does exist
if [ ! -a 'foo' ]; then echo 'does not exist'; fi
does not exist

无论如何都会输出“不存在”。

I'm trying to determine if a file or directory doesn't exist. I tried the following commands to see if a file does exist and they work correctly:

if [ -a 'settings.py' ]; then echo 'exists'; fi
exists #output
if [ -a 'foo' ]; then echo 'exists'; fi #outputs nothing

But when I try this:

if [ ! -a 'settings.py' ]; then echo 'does not exist'; fi
does not exist #shouldn't be output since the file does exist
if [ ! -a 'foo' ]; then echo 'does not exist'; fi
does not exist

'does not exist' is output no matter what.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

全部不再 2024-10-02 07:51:36

我之前在使用 [ 命令时遇到过问题。我更喜欢 [[ 变体,因为它更强大,而且根据我的经验,不太容易出现这样的“陷阱”。

如果您使用 [[ 命令,您的测试命令可以正常工作:

pax> touch qq
pax> if [[ -a qq ]] ; then echo exists ; fi
exists
pax> if [[ ! -a qq ]] ; then echo not exists ; fi
pax> rm qq
pax> if [[ ! -a qq ]] ; then echo not exists ; fi
not exists

I've had problems with the [ command before. I prefer the [[ variant since it's much more powerful and, in my experience, less prone to "gotchas" like this.

If you use the [[ command, your test commands work fine:

pax> touch qq
pax> if [[ -a qq ]] ; then echo exists ; fi
exists
pax> if [[ ! -a qq ]] ; then echo not exists ; fi
pax> rm qq
pax> if [[ ! -a qq ]] ; then echo not exists ; fi
not exists
无力看清 2024-10-02 07:51:36

尝试使用 -e 代替 -a

此页面位于 Linux 文档项目 说:

-a-e 效果相同。但它已被弃用,并且不鼓励使用。

Try using -e in place of -a

This page on the Linux Documentation Project says:

-a is identical in effect to -e. But it has been deprecated, and its use is discouraged.

初懵 2024-10-02 07:51:36

您可以使用测试

test -e "$file" && echo "exists"

you can use test

test -e "$file" && echo "exists"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文