我有這個腳本:
#!/bin/bash
USERS=("user1.com" "user2.co.uk" "user3.com")
PASSES=("pass1" "pass2" "pass3")
for i in ${USERS[@]}; do
echo ${PASSES[i]};
done
運行此腳本輸出:
my-script.sh:第 6 行:user1.com:語法錯誤:算術運算子無效(錯誤標記為「.com」)
但是,我的值用引號引起來,據我所知,echo
這不是算術運算。
對於具有 PHP 背景的人來說,這很令人困惑。在 PHP 中我們可以這樣做:
echo gettype($string);
echo gettype($int);
哪個輸出
字串
整數
然而,這些引用似乎並不像我想像的那樣。如何強制使用字串而不是user1.com
視為user1
.
com
?
答案1
您目前的程式碼擴展為
for i in user1.com user2.co.uk user3.com; do
echo ${PASSES[i]};
done
這當然毫無意義。間接運算子會產生一個陣列索引清單:
bash$ echo "${!USERS[@]}"
0 1 2
這樣,您就可以循環各個索引。我們還添加正確的引用。
for i in ${!USERS[@]}; do
echo "${PASSES[i]}"
done
對於滿分,你的私有變數不應該使用大寫;大寫變數名保留給系統使用。