我有一個問題可以透過這個答案解決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 列表的形式為A控制操作員是
command1 && command2
當且僅當 command1 返回退出狀態為零時,command2 才會執行。 [..切..] AND 和 OR 清單的回傳狀態是最後一個指令的退出狀態 列表中執行。
執行控制功能的令牌。它是以下符號之一: || &&& ; ;; ( ) |
因此在這種情況下,不要將其&&
視為布林運算符。所以現在您知道何時exit 1
執行 - 僅在上一個命令成功時(如果退出狀態為零)。
看到這個伺服器故障解答為了&&
Bash 中 3 種不同上下文的解釋。對於學習它們之間的差異很有用。
答案2
如果沒有恰好有兩個參數傳遞給腳本,它將在該行退出腳本。
$#
是呼叫腳本時傳入的參數數量,類似argc
C 中(( $# != 2 ))
0
如果參數數量不等於,則傳回 true 代碼 ( )2
&&
僅當左側以 true 代碼退出時才運行右側。這意味著如果參數數量不是 2,則運行右側。exit 1
使用錯誤的退出代碼 退出腳本1
。這會在此時中止腳本並通知呼叫者發生錯誤。