Contents

連續打指令 && 與 ; 差別

在 Shell 裡面連續執行多個指令時,;&& 看起來都像是把兩條命令接在一起,但語意其實差很多。這種差異平常手打指令時也許不明顯,一旦放進 Script、Cron 或部署流程裡,就很容易影響結果。

先理解一個核心概念

每一條 Shell 指令執行完,都會回傳一個 exit code。通常:

  1. 0 代表成功。
  2. 0 代表失敗。

;&& 的差異,就建立在這個回傳值之上。

; 是什麼意思

1
echo "start" ; ls -la

; 的意思比較像是單純分隔指令,前一條跑完就接著跑下一條,不管前一條成功還是失敗。

適合用在:

  1. 兩條指令彼此沒有強依賴。
  2. 你只是想照順序執行。
  3. 中間某一步失敗,也不想阻止後面的步驟。

&& 是什麼意思

1
echo "start" && ls -la

&& 則是條件式串接,只有前一條指令成功,後一條才會執行。

這種寫法適合用在:

  1. 前一步成功,後一步才有意義。
  2. 你想在失敗時立刻停住。
  3. 部署或安裝流程需要明確保護後續步驟。

實務上怎麼選

最簡單的判斷方式是:

  1. 只要照順序做,用 ;
  2. 有相依性,要前面成功才繼續,用 &&

例如安裝完套件才執行程式,通常就比較適合:

1
npm install && npm run build

因為如果安裝失敗,後面的 build 繼續跑也沒意義。

常見誤區

1. 以為它們只是寫法不同

不是。兩者最大的差別在於失敗時後續命令會不會被擋下來。

2. 在排程或部署裡亂用 ;

如果你把有相依性的流程全用 ; 接起來,就有可能出現前面早就失敗了,後面還繼續做,最後反而更難查問題。

小結

;&& 雖然都能拿來串接 Shell 指令,但用途不同。; 偏向無條件順序執行,&& 偏向成功才往下做。把這個差異記清楚,寫 Script 或排錯時會少踩很多雷。