我有这个脚本:
#!/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
对于满分,你的私有变量不应该使用大写;大写变量名保留供系统使用。