変数に文字列型を使用するように強制する方法は?

変数に文字列型を使用するように強制する方法は?

このスクリプトがあります。

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

フルクレジットを取得するには、プライベート変数に大文字を使用しないでください。大文字の変数名はシステム用に予約されています。

おすすめ記事