如何强制变量使用字符串类型?

如何强制变量使用字符串类型?

我有这个脚本:

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

对于满分,你的私有变量不应该使用大写;大写变量名保留供系统使用。

相关内容