在此 shell 腳本中包含包含退出程式碼的布林表達式的目的是什麼?

在此 shell 腳本中包含包含退出程式碼的布林表達式的目的是什麼?

我有一個問題可以透過這個答案解決https://superuser.com/a/508761

現在我需要擴展它來做其他事情,但首先我需要在修改它之前更好地理解它是如何工作的。這是有問題的腳本:

#!/bin/bash

(( $# != 2 )) && exit 1

for f in *; do
  newf="${f//$1/$2}"
  if [[ $f != $newf ]]; then
    mv "$f" "$newf"
  fi
done

有什麼(( $# != 2 )) && exit 1作用?我在網路上找到解釋的​​運氣並不好:我找到了每個組件的含義,但沒有找到整個腳本中整行程式碼的作用。答案沒有解釋那條線。該海報最後一次在網路上發布是兩年多前,我不想廢除一個 5 年前的問題,所以我在這裡。

答案1

它是一個控制運算符

猛擊人:

控制運算子 && 和 ||分別表示 AND 列表和 OR 列表。
 AND 列表的形式為
command1 && command2
當且僅當 command1 返回退出狀態為零時,command2 才會執行。 [..切..] AND 和 OR 清單的回傳狀態是最後一個指令的退出狀態 列表中執行。
A控制操作員
    執行控制功能的令牌。它是以下符號之一:
        || &&& ; ;; ( ) |
 

(學分)

因此在這種情況下,不要將其&&視為布林運算符。所以現在您知道何時exit 1執行 - 僅在上一個命令成功時(如果退出狀態為零)。

看到這個伺服器故障解答為了&&Bash 中 3 種不同上下文的解釋。對於學習它們之間的差異很有用。

答案2

如果沒有恰好有兩個參數傳遞給腳本,它將在該行退出腳本。

  • $#是呼叫腳本時傳入的參數數量,類似argcC 中

  • (( $# != 2 ))0如果參數數量不等於,則傳回 true 代碼 ( )2

  • &&僅當左側以 true 代碼退出時才運行右側。這意味著如果參數數量不是 2,則運行右側。

  • exit 1使用錯誤的退出代碼 退出腳本1。這會在此時中止腳本並通知呼叫者發生錯誤。

相關內容