Bash
bash 語法錯誤:通過數組解析時算術運算符無效(錯誤標記為“.google.com”)
我有一個域數組,我試圖遍歷並檢查文件中的字元串是否與數組中的任何域匹配。但是,當 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 輸出儲存在變數中的方式有問題?
您正在使用數組的字元串元素作為數字索引:
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
部分將被視為shell 變數。
- 在算術表達式中,變數不需要以美元符號作為前綴
- 測試:
a=5; b=7; echo $(( a * b ))
- 但是,從算術上講,沒有
.
運算符,因此解析器不知道如何處理表達式的其餘部分。