shell变量之辨[6]

[变量的类型?]

看看下面的a, b在不同的时候分别是什么类型?
#!/bin/bash
a="1234"
let "a += 1"
echo "a = $a";

b=${a/23/AB};
echo "b = $b";
b=1234
echo "b = $b";
b=abcd
echo "b = $b";

b=${a/23/AB};
declare -i b
echo "b = $b";
b=1234
echo "b = $b";
b=abcd
echo "b = $b";

shell是不区分变量类型的, 我们使用它的时候它会自动选择我们所需要的类型. 就如同上面的第一段代码, a是字符串, 但是让它做加法运算, 很自然地会把它当成数字, 输出:

a = 1235

再看第二段, b被赋值为${a/23/AB}, 即将a中的”23″替换为”AB”, 输出的即为:

b = 1AB5

再接下来, b被重新赋值为1234这样的一个”Int”, 或者是abcd这样的”String”, 很自然地, 输出为:

b = 1234
b = abcd

但是, 我们在第三段代码中使用了一个”declare -i”, 这个就很神奇了. declare是显式指明变量类型, -i表示int.

输出的结果是这样的:

b = 1AB5
b = 1234
b = 0

当b已经是一个字符串1AB5的时候, 输出的值表明它并没有什么变化, 接下来我们赋值为1234这样的int, 也很正常. 但是再次将其赋值为一个字符串, 它表现出来的现象和刚刚第二段就不同了. 输出的内容是0, 即字符串”abcd”被当成一个int类型时, 数值为0

 

 

本文链接:https://www.poisonbian.com/post/217.html 转载需授权!

分享到:
原文链接:,转发请注明来源!
「shell变量之辨[6]」评论列表

发表评论