Bash

如何在變數上強製字元串類型?

  • June 5, 2019

我有這個腳本:

#!/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.comas user1 . com

您目前的程式碼擴展為

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

對於完整點,您不應該對私有變數使用大寫;大寫變數名保留給系統使用。

引用自:https://unix.stackexchange.com/questions/523033