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

问题描述 投票:1回答:6

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

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,因为它是最简单的,并且保证了我的输入可以避免警告。

谢谢大家的建议。

测试几个变量是否相等的正确方法是什么? if [[$ var1 = $ var2 = $ var3]]#语法错误是否需要编写类似以下内容的东西?如果[[$ var1 = $ var2 && ...

bash conditional
6个回答
3
投票

如果要测试任意数量项目的相等性(我们将它们称为$ 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

2
投票

如果它们是单个单词,您可能会对此感到非常便宜。


1
投票

传递方法


1
投票

((编辑以包括分隔符以解决Keith Thompson指出的问题)


1
投票

对于您的特定情况,这应该起作用:


0
投票

[ "$var1-$var1-$var1" == "$var2-$var3-$var4" ]

字符-最好不包含在var1,2,3,4中

© www.soinside.com 2019 - 2024. All rights reserved.