Bash:测试多个变量的相互相等性?

标签 bash conditional-statements

测试多个变量是否都相等的正确方法是什么?

if [[ $var1 = $var2 = $var3 ]] # syntax error

有必要这样写吗?

if [[ $var1 = $var2 && $var1 = $var3 && $var2 = $var3 ]] # cumbersome
if [[ $var1 = $var2 && $var2 = $var3 && $var3 = $var4 ]] # somewhat better

不幸的是,其他方面都很出色Advanced Bash Scripting Guide以及我能找到的其他在线资源都没有提供这样的示例。

我的特别动机是使用 ls -1 $dir | 测试多个目录是否都具有相同数量的文件wc -l 统计文件数。

注意
“var1”等是示例变量。我正在为任意变量名寻找解决方案,而不仅仅是那些具有可预测数字结尾的变量名。

更新
我接受了 Richo 的回答,因为它是最笼统的。然而,我实际上使用的是 Kyle 的,因为它是最简单的,而且我的输入可以保证避免警告。

谢谢大家的建议。

最佳答案

如果你想测试任意数量的项目是否相等(我们称它们为 $item1-5,但它们可以是一个数组

st=0
for i in $item2 $item3 $item4 $item5; do
    [ "$item1" = "$i" ]
    st=$(( $? + st ))
done

if [ $st -eq 0 ]; then
    echo "They were all the same"
fi

关于Bash:测试多个变量的相互相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8812089/

相关文章:

linux - 检查域是否在服务器上处于事件状态

conditional-statements - Elixir 中 cond block 中条件内的绑定(bind)表达式?

javascript - 从输入框获取值,根据一定条件改变url

matlab - 如何改变Matlab中的循环条件?

linux - 如何正确地将 bash 数组传递给 awk

bash - 在文件中查找包含重复字符的行

linux - 为什么 "kill"与终端和 system() 不同?

perl - 如何循环多个文件,保留基本名称以供进一步处理?

java - 如何正确等待用户输入?

algorithm - 计算的前身和后继者