我知道运算符 ';'、'&'、'&&' 或 '||' 的相对绑定优先级
http://www.gnu.org/software/bash/manual/bashref.html#Lists
但是当管道与“&&”一起出现时,我很难理解绑定强度,要么偶然发现正确的命令,要么就放弃。
'|' 的绑定优先级是什么 和 '>' 相比?
我感到困惑的示例:
ls _thumbnails/video.mp4.jpg 2>/dev/null
&& echo "thumbnail already generated. Not regenerating" \
&& exit \
|| ffmpeg_thumbnail_create video.mp4 2>/dev/null \
&& ls _thumbnails/video.mp4.jpg \
&& echo "Thumbnail successfully created" \
&& exit \
|| echo "Thumbnail creation failed" \
| tee ~/thumbnails.log
Run Code Online (Sandbox Code Playgroud)
上面的目标是当且仅当一个缩略图不存在时创建一个缩略图(我每天运行一个 cronjob)。而且我不喜欢 ffmpeg 在没有错误时的大量输出(这不是 Unix 方式)。还有其他情况,所以不要开始给我建议使用单独的语句或特定于这些程序的特殊选项。我想了解绑定优先级。
在一些脚本中,我看到if
条件语句写成:
if [ some_conditional_statement ]; then
# do stuff
fi
Run Code Online (Sandbox Code Playgroud)
或者
[ some_conditional_statement ] && #do stuff
Run Code Online (Sandbox Code Playgroud)
第二个示例是否等效(仅当条件为真时才会执行 do stuff 部分),但仅当您只需要执行一个命令时才有用,例如:
[ -f "/path/to/some/file" ] && . /path/to/some/file
Run Code Online (Sandbox Code Playgroud)
还是我遗漏了另一个区别?