概述
变量的赋值
=
赋值操作(前后都不能有空白)
注意:因为=
和-eq
都可以用作条件测试操作,所以不要与这里的赋值操作相混淆。
=
既可以用作条件测试操作,也可以用于赋值操作,这需要视具体上下文而定
简单的变量赋值
#!/bin/bash
# "裸体"变量
echo
# 变量什么时候是"裸体"的, 比如前边少了$的时候?
# 当它被赋值的时候, 而不是被引用的时候.
# 赋值
a=879
echo "The value of "a" is $a."
# 使用'let'赋值
let a=16+5
echo "The value of "a" is now $a."
echo
# 在'for'循环中(事实上, 这是一种伪赋值):
echo -n "Values of "a" in the loop are: "
for a in 7 8 9 11
do
echo -n "$a "
done
echo
echo
# 使用'read'命令进行赋值(这也是一种赋值的类型):
echo -n "Enter "a" "
read a
echo "The value of "a" is now $a."
echo
exit 0
简单又不简单的的两种类型的变量赋值
#!/bin/bash
a=23
# 简单的赋值
echo $a
b=$a
echo $b
# 现在让我们来点小变化(命令替换).
a=`echo Hello!`
# 把'echo'命令的结果传给变量'a'
echo $a
# 注意, 如果在一个#+的命令替换结构中包含一个(!)的话,
#+ 那么在命令行下将无法工作.
#+ 因为这触发了Bash的"历史机制."
# 但是, 在脚本中使用的话, 历史功能是被禁用的, 所以就能够正常的运行.
a=`ls -l`
echo $a
echo
echo "$a"
exit 0
使用$(...)
机制来进行变量赋值(这是一种比后置引用(反引号`)更新的一种方法). 事实上这两种
方法都是命令替换的一种形式.
# From /etc/rc.d/rc.local
R=$(cat /etc/redhat-release)
arch=$(uname -m)
bash
变量是不区分类型的
不像其他程序语言一样,bash
并不区分变量的类型,本质上bash
变量都是字符串。实际的作用依赖于上下文,Bash
也允许比较操作和整数操作,其中的关键因素就是,变量中的值是否只有数值。
#!/bin/bash
# int-or-string.sh: 整型还是字符串?
a=2334 #整型.
let "a += 1"
echo "a = $a " # a = 2335
echo # 还是整型.
b=${a/23/BB}
# 将"23"替换成"BB".
# 这将把变量b从整型变为字符串.
echo "b = $b"
# b = BB35
declare -i b
# 即使使用declare命令也不会对此有任何帮助.
echo "b = $b"
# b = BB35
let "b += 1"
# BB35 + 1 =
echo "b = $b"
# b = 1
echo
c=BB34
echo "c = $c"
# c = BB34
d=${c/BB/23}
# 将"BB"替换成"23".
# 这使得变量$d变为一个整形.
echo "d = $d"
# d = 2334
let "d += 1"
# 2334 + 1 =
echo "d = $d"
# d = 2335
echo
# null变量会如何呢?
e=""
echo "e = $e"
# e =
let "e += 1"
# 算术操作允许一个null变量?
echo "e = $e"
# e = 1
echo
# null变量将被转换成一个整型变量.
# 如果没有声明变量会怎样?
echo "f = $f"
# f =
let "f += 1"
# 算术操作能通过么?
echo "f = $f"
# f = 1
echo
# 未声明的变量将转换成一个整型变量.
# 所以说Bash中的变量都是不区分类型的.
exit 0
不区分变量的类型既是幸运的事情也是悲惨的事情. 它允许你在编写脚本的时候更加的灵活(但是也足
够把你搞晕!), 并且可以让你能够更容易的编写代码. 然而, 这也很容易产生错误, 并且让你养成糟糕
的编程习惯.
这样的话, 程序员就承担了区分脚本中变量类型的责任. Bash是不会为你区分变量类型的
最后
以上就是迷路胡萝卜为你收集整理的bash-shell高级编程-变量的赋值的全部内容,希望文章能够帮你解决bash-shell高级编程-变量的赋值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复