【问题标题】:Matching a number with numbers in a list variable将数字与列表变量中的数字匹配
【发布时间】:2012-06-03 11:49:52
【问题描述】:

我在这个 for 循环中做错了什么?我有变量$gGID,其中包含一些数字。我有另一个使用列表的顶部编号,即$ONEGID 变量。我想使用$ONEGID$gGID 中的列表进行匹配,如果匹配,则继续执行其他操作。

echo $ONEGID

116899029375914044550 

我用

收集$gGID 中的内容
gGID=$(curl -A 'Mozilla/4.0' --silent "https://www.google.com/search?q=$Daniel%20Sandman%20plus.google.com" | grep -P -o '(?<=plus.google.com/)[^az/u]+(?=/)')

这就是$gGID 给我的..

echo $gGID

116899029375914044550
116899029375914044550
116899029375914044550
108176814619778619437
108176814619778619437
108176814619778619437
105237212888595777019
105237212888595777019
105237212888595777019

这是我用来匹配它的 for 循环。

for USERS in $gGID; do
    if [ "$USERS" = "$ONEGID" ]; then
        echo "More than one match"
    else
        echo "Just one match"
    fi
done

我尝试了多种方法,但没有弄明白。我看不出我做错了什么。难道是我存储在$gGID 中的变量算作一个数字,这就是为什么?

【问题讨论】:

  • 运行时会发生什么?为什么它不起作用?
  • @TimPote 它应该给出“不止一场比赛”,但给出“只有一场比赛”。就好像它没有一个一个地遍历数字。 “只有一场比赛”适用于没有任何比赛的情况。
  • 您的$gGID 中有什么内容。这些没有被引用就无法打印new line
  • @kev 哦...对不起,当然应该添加。 gGID=$(curl -A 'Mozilla/4.0' --silent "https://www.google.com/search?q=$Daniel%20Sandman%20plus.google.com" | grep -P -o '(?&lt;=plus.google.com/)[^az/u]+(?=/)')
  • 你的意思是:echo "$gGID"?没有引号,结果将是一行。

标签: bash if-statement for-loop


【解决方案1】:

不确定你的意思,为什么当它不匹配时你会回显“只有一个匹配”?无论如何,这是你的意思吗?

#!/bin/bash

ONEGID=116899029375914044550  

gGID=\
"116899029375914044550 
116899029375914044550 
116899029375914044550 
108176814619778619437 
108176814619778619437 
108176814619778619437 
105237212888595777019 
105237212888595777019 
105237212888595777019"

matches=0

for USERS in $gGID; do 
    if [[ $USERS == $ONEGID ]]
    then 
        (( matches++ ))
    fi 
done 

if (( matches == 0 ))
then
    echo "no matches"
elif ((matches == 1 ))
then
    echo "Just one match"
else
    echo "$matches matches"
    echo "more than one match"
fi

(在问题更改为包含 curl 之前进行了测试 - 也适用于 curl)

【讨论】:

  • 是的,这正是我所追求的。对不起,如果我的解释不好。我想要两个状态。如果 curl 仅与用户 id 匹配,或者 curl 有很多,那么如果是这种情况,则做不同的事情。
【解决方案2】:

如果您只想获取匹配数,请使用grep。特别是,您应该查看-c(计数)、-F(纯文本)和-x(整行)开关:

$ grep -cFx "$ONEGID" <<<"$gGID"
3

其实你可以完全跳过$gGID这个变量,直接使用curl

curl -A 'Mozilla/4.0' --silent "https://www.google.com/search?q=$Daniel%20Sandman%20plus.google.com" | grep -P -o '(?<=plus.google.com/)[^az/u]+(?=/)' \
    | grep -cFx "$ONEGID"

(为了可读性而拆分)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多