0

この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単一の数値としてカウントされる可能性がありますか?それが理由ですか?

4

2 に答える 2

1

一致数を取得するだけの場合は、 を使用しますgrep。特に、-c(count)、-F(plain text)、および-x(full line) スイッチを確認する必要があります。

$ 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"

(読みやすいように分割)

于 2012-06-03T14:11:14.417 に答える
1

意味がよくわかりませんが、一致しないのに「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

(カールを含むように質問が変更される前にテスト済み - カールでも動作します)

于 2012-06-03T14:00:48.343 に答える