![bash:现有文件不存在-或者存在?还是不存在?](https://linux22.com/image/994978/bash%EF%BC%9A%E7%8E%B0%E6%9C%89%E6%96%87%E4%BB%B6%E4%B8%8D%E5%AD%98%E5%9C%A8-%E6%88%96%E8%80%85%E5%AD%98%E5%9C%A8%EF%BC%9F%E8%BF%98%E6%98%AF%E4%B8%8D%E5%AD%98%E5%9C%A8%EF%BC%9F.png)
我遇到了一个无法解决的问题,希望在这里得到一些帮助。
在名为的目录中qemu-servers
应该有一个名为的文件100.conf
。但是,bash 没有显示它,但如果我测试它,它就在那里......
root@proxmox:/etc/pve/nodes/proxmox/qemu-server# test 100.conf && echo "Found" || echo "Not found"
Found
如果我ls -a
这样做则不会显示:
root@proxmox:/etc/pve/nodes/proxmox/qemu-server# ls -a
. .. 101.conf
有一个名为的文件101.conf
,但没有100.conf
如果我尝试执行rm
它100.conf
或touch
其他任何操作,bash 都会返回错误:
root@proxmox:/etc/pve/nodes/proxmox/qemu-server# rm 100.conf
rm: cannot remove ‘100.conf’: No such file or directory
root@proxmox:/etc/pve/nodes/proxmox/qemu-server# touch 100.conf
touch: cannot touch ‘100.conf’: File exists
我怎样才能摆脱这个问题?
答案1
问题在于:
test 100.conf
它正在进行字符串测试,即字符串是否100.conf
不为空。由于它不为空,因此您始终会得到Found
。
这类似于:
test -n 100.conf
[ 100.conf ]
[ -n 100.conf ]
您需要检查文件是否存在,即test -f
:
test -f 100.conf && echo "Found" || echo "Not found"