このスクリプトがあります。
#!/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
フルクレジットを取得するには、プライベート変数に大文字を使用しないでください。大文字の変数名はシステム用に予約されています。