Unix测试存在或文件

lov*_*nix 2 unix linux bash shell

[ -f /tmp/myfile.txt ] && echo "File exists" || echo "No such file"
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?具体是评价&&||.

koj*_*iro 5

&&并且||是控制操作符,用于根据先前命令的退出状态确定是否应执行以下命令.来自man (1) bash:

控制运算符&&和|| 分别表示AND列表和OR列表.AND列表具有表单

  command1 && command2
Run Code Online (Sandbox Code Playgroud)

当且仅当command1返回退出状态为零时,才执行command2.

OR列表具有表单

  command1 || command2
Run Code Online (Sandbox Code Playgroud)

当且仅当command1返回非零退出状态时才执行command2.AND和OR列表的返回状态是列表中执行的最后一个命令的退出状态.

[,或者test,如果命令通过测试,则返回退出状态.来自help test:

test:test [expr]根据EXPR的评估退出状态为0(真)或1(假).

所以,当你这样做

[ -f /tmp/myfile.txt ] && echo foo || echo bar
Run Code Online (Sandbox Code Playgroud)

你真正说的是(请仔细阅读)如果文件存在,请回显foo.如果文件不存在echo foo命令失败,则回显栏.

这是这些控制操作符和if…then命令之间的微妙但重要的区别.