bash-shell高級編程-變量的賦值

變量的賦值

=

賦值操作(前後都不能有空白)

注意:因爲=-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是不會爲你區分變量類型的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章