連續打指令 && 與 ; 差別
Contents
在 Shell 裡面連續執行多個指令時,; 和 && 看起來都像是把兩條命令接在一起,但語意其實差很多。這種差異平常手打指令時也許不明顯,一旦放進 Script、Cron 或部署流程裡,就很容易影響結果。
先理解一個核心概念
每一條 Shell 指令執行完,都會回傳一個 exit code。通常:
0代表成功。- 非
0代表失敗。
而 ; 和 && 的差異,就建立在這個回傳值之上。
; 是什麼意思
|
|
; 的意思比較像是單純分隔指令,前一條跑完就接著跑下一條,不管前一條成功還是失敗。
適合用在:
- 兩條指令彼此沒有強依賴。
- 你只是想照順序執行。
- 中間某一步失敗,也不想阻止後面的步驟。
&& 是什麼意思
|
|
&& 則是條件式串接,只有前一條指令成功,後一條才會執行。
這種寫法適合用在:
- 前一步成功,後一步才有意義。
- 你想在失敗時立刻停住。
- 部署或安裝流程需要明確保護後續步驟。
實務上怎麼選
最簡單的判斷方式是:
- 只要照順序做,用
;。 - 有相依性,要前面成功才繼續,用
&&。
例如安裝完套件才執行程式,通常就比較適合:
|
|
因為如果安裝失敗,後面的 build 繼續跑也沒意義。
常見誤區
1. 以為它們只是寫法不同
不是。兩者最大的差別在於失敗時後續命令會不會被擋下來。
2. 在排程或部署裡亂用 ;
如果你把有相依性的流程全用 ; 接起來,就有可能出現前面早就失敗了,後面還繼續做,最後反而更難查問題。
小結
; 和 && 雖然都能拿來串接 Shell 指令,但用途不同。; 偏向無條件順序執行,&& 偏向成功才往下做。把這個差異記清楚,寫 Script 或排錯時會少踩很多雷。