ドメイン配列があり、これを繰り返して、ファイル内の文字列が配列のドメインと一致することを確認します。ただし、forループが起動するとエラーが発生します。
line 64: www.google.com: syntax error: invalid arithmetic operator (error token is ".google.com")
配列とforループは次のとおりです。
sites=("www.google.com" "www.bing.com" "www.yahoo.com" "www.duckduckgo.com")
while read line; do
csvString=$(echo "$line");
greppedDomain=$(echo "$line" | grep -Eo '[A-Za-z0-9]{2,62}\.[A-Za-z0-9]{2,62}\.[A-Za-z]{2,62}');
for i in "${sites[@]}"; do
if [ "$greppedDomain" = "${sites[$i]}" ]
then
sitesOut+=($csvString);
fi
done
done < sitelist.txt
現在当惑しています。おそらく、grep出力が変数に格納される方法に問題があるのでしょうか?
ベストアンサー1
配列の文字列要素を数値インデックスとして使用します。
for i in "${sites[@]}"; do
if [ "$greppedDomain" = "${sites[$i]}" ]
数値でインデックス付けされた配列で逆参照されると、角かっこ内のインデックス部分は実際に算術式です。これにより、インデックス操作(たとえば)を実行できますx[i]=${x[i+1]}
。
エラーを再現するには:
$ x=(a b c)
$ i="www.google.com"
$ echo "${x[i]}"
bash: www.google.com: syntax error: invalid arithmetic operator (error token is ".google.com")
配列インデックスの算術属性を表示するために、算術式の文字列を見てみましょう。
$ echo $((www.google.com))
bash: www.google.com: syntax error: invalid arithmetic operator (error token is ".google.com")
同じエラーです。
エラータグは「.google.com」です。理由は何ですか?
$((www.google.com))
このセクションを解析すると、www
次のように処理されます。シェル変数。- 算術式では、変数の前にドル記号を付ける必要はありません。
- テスト:
a=5; b=7; echo $(( a * b ))
しかし、算術的に言えば演算子がないので、パーサは残りの式
.
で何をすべきかわかりません。