照着教程敲 npm install && npm run dev,只知道中间那两个符号要一起打,问什么意思,答不上来。&&和||是什么意思,其实就一句话:前一条命令成功了,才执行后一条。
在 Linux、macOS 的 shell 和 Windows 的 cmd 里,&& 是「并且」,|| 是「或者」,判断依据是上一条命令的退出码;PowerShell 要 7 以上才支持这两个符号。退出码 0 算成功,非 0 算失败。cd /var/www && ls 的意思是切过去成功才列目录;切失败就停住,不会在错误的目录里乱跑。
|| 在命令行里是失败才执行
mkdir backup || echo 目录已存在,创建失败时才打印提示。它不看输出的文字,只看退出码;想不管成败都执行下一条,用分号 ; 分隔。这三个符号混用时要留意顺序,&& 和 || 从左到右结合,写太长容易看晕,分几行写更清楚。
在 JavaScript 里是短路求值
a && b 先看 a,a 为假就直接返回 a,不再看 b;a || b 在 a 为真时直接返回 a。返回的是操作数本身,不一定是 true 或 false。所以 const name = input || '匿名' 能拿来兜底,user && user.name 能避免读空对象的属性时报错。
优先级和位运算别搞混
&& 的优先级高于 ||,a || b && c 等于 a || (b && c),拿不准就加括号。单个 & 和 | 是位运算,两边都要求值,不会短路。在条件里把 && 写成 &,多数时候结果碰巧一样,遇到函数调用就会多执行一次,埋下副作用。
不同语言里的差异
Python 用 and 和 or,效果类似,返回的也是操作数;PHP 里 && 和 and 优先级不同,赋值时容易踩坑。Shell 里还有双方括号内部的逻辑组合,写脚本时按所用 shell 的规则来;看不懂别人的命令,先拆成单条跑一遍,比猜快。Makefile 和 npm scripts 里也常拿这两个符号串联步骤,写法和命令行一致。
记住退出码这条主线,&& 和 || 就不神秘了:一个管成功后续,一个管失败兜底。写长命令前先在测试目录跑一遍,别在生产环境试手。