如何強制變數使用字串類型?

如何強制變數使用字串類型?

我有這個腳本:

#!/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

對於滿分,你的私有變數不應該使用大寫;大寫變數名保留給系統使用。

相關內容