次のようなスクリプトがあります:
#!/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
完全なポイントを得るには、プライベート変数に大文字を使用しないでください。大文字の変数名はシステム使用のために予約されています。