我有一个问题可以通过这个答案解决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
做什么?我在网上找不到解释:我知道每个组件是什么,但不知道整行代码在整个脚本中起什么作用。答案没有解释那一行。发帖人上次上网是 2 年前,我不想重提 5 年前的问题,所以我就来这里了。
答案1
它是一个控制运算符
从打击人:
控制运算符 && 和 || 分别表示 AND 列表和 OR 列表。 AND 列表的形式为A控制操作员是
command1 && command2
当且仅当 command1 返回退出状态零时,才会执行 command2。 [..切..] AND 和 OR 列表的返回状态是最后一个命令的退出状态 列表中执行。
执行控制功能的标记。它是以下符号之一: || & && ; ;; ()|
因此在这种情况下,不要将其读&&
作布尔运算符。所以现在您知道何时exit 1
执行 - 仅在前一个命令成功时(如果退出状态为零)。
看到这个服务器故障答案为了&&
在 Bash 中的 3 种不同上下文中的解释。有助于学习它们之间的区别。
答案2
如果没有向脚本传递两个参数,它将在该行退出脚本。
$#
是调用脚本时传入的参数数量,类似于argc
C 语言(( $# != 2 ))
0
如果参数数量不等于,则返回 truey 代码 (2
&&
仅当左侧以 truey 代码退出时才运行右侧。这意味着如果参数数量不是 2,则运行右侧。exit 1
使用错误的退出代码退出脚本1
。这会在此时中止脚本并通知调用者发生了错误。