日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

基礎不牢地動山搖——shell中的變量和參數如何定義和使用?有什么注意點

來源: 責編: 時間:2024-01-10 09:35:51 206觀看
導讀Shell中的變量和參數如何定義和使用?變量是編程和腳本語言表示數據的方式。變量其實不僅僅是一個標簽,一個分配給計算機內存中保存項目的位置或位置集的數據的標簽,變量沒有其他意義。變量出現在算術運算和和數量操作中,

Shell中的變量和參數如何定義和使用?pem28資訊網——每日最新資訊28at.com

變量是編程和腳本語言表示數據的方式。變量其實不僅僅是一個標簽,一個分配給計算機內存中保存項目的位置或位置集的數據的標簽,變量沒有其他意義。pem28資訊網——每日最新資訊28at.com

變量出現在算術運算和和數量操作中,以及字符串解析時。pem28資訊網——每日最新資訊28at.com

pem28資訊網——每日最新資訊28at.com

Shell中的變量是什么?

變量的名稱是對它所持有的數據的占位符(代名詞)。引用(檢索)其值稱為變量替換。獲取變量值使用美元符號:pem28資訊網——每日最新資訊28at.com

$

讓我們仔細區分變量的 名稱 及 變量值。如果 variable1 是 變量,則 $variable 是對其值的引用, 它包含的數據項。pem28資訊網——每日最新資訊28at.com

從技術上講,變量的名稱稱為左值,這意味著它出現 在作業的左側 語句,如 VARIABLE=23 所示。變量的值為 右值,這意味著 它出現在賦值語句的右側,如 VAR2=$VARIABLE。事實上,變量的名稱是引用,是指向內存的指針,即該變量的值被保留在變量指向的內存位置起始的內存字節空間中。pem28資訊網——每日最新資訊28at.com

pem28資訊網——每日最新資訊28at.com

用一段shell命令演示變量的定義、賦值、讀取(bash$ 后面的是具體執行的shell命令):pem28資訊網——每日最新資訊28at.com

bash$ variable1=23bash$ echo variable1variable1bash$ echo $variable123

以“裸露”方式使用變量(沒有 $ 前綴)的唯一時間是 聲明或分配、未設置時、導出(export)時、 在雙括號內的算術表達式中 (( variable1 )),或者在變量的特殊情況下 表示信號時(參見示例 32-5)。pem28資訊網——每日最新資訊28at.com

示例 32-5:shell的變量與信號pem28資訊網——每日最新資訊28at.com

#!/bin/bash# Hunting variables with a trap.trap 'echo Variable Listing --- a = $a  b = $b' EXIT#  EXIT is the name of the signal generated upon exit from a script.##  The command specified by the "trap" doesn't execute until#+ the appropriate signal is sent.echo "This prints before the /"trap/" --"echo "even though the script sees the /"trap/" first."echoa=39b=36exit 0#  Note that commenting out the 'exit' command makes no difference,#+ since the script exits in any case after running out of commands.

shell中如何給變量賦值?

賦值可以帶有 =(如 var1=27), 在 READ 語句中:pem28資訊網——每日最新資訊28at.com

#!/bin/bash# 讀取用戶輸入echo "請輸入你的名字:"read name# 輸出用戶輸入的內容echo "你輸入的名字是:$name"

或在循環的頭部(for var2 in 1 2 3方式循環給變量var2賦值并打印值):pem28資訊網——每日最新資訊28at.com

bash$ for var2 in 1 2 3;do echo $var2;done123

將引用的值括在英文的雙引號中 ("...") 不會干擾變量操作。這是被稱為部分引用 或稱為“弱引用”。pem28資訊網——每日最新資訊28at.com

使用英文的單引號 ('...') 導致按字面意思使用變量名,而不是將其替換為實際值。如:pem28資訊網——每日最新資訊28at.com

var1=123echo '$var1'# 輸出結果為 $var1, 也就是原原本本,未做變量替換。echo "$var1"# 輸出結果為123, 也就是雙引號有會按變量替換。

單引號內的變量效果是全引用,有時稱為“強”引用。請參閱第 5 章 詳細討論SHELL的引用[1]。pem28資訊網——每日最新資訊28at.com

請注意,$variable實際上是 ${variable} 的簡化形式。在有的shell上下文中  語法會導致錯誤,那時使用{variable}`形式可能是推薦的做法(請參閱下面的第 10.2 節 SHELL的參數[2])。pem28資訊網——每日最新資訊28at.com

shell的變量和賦值的綜合例子:

#!/bin/bash# ex9.sh# 變量:賦值和替換a=375hello=$a# ---------------------------------------# 賦值時,等號兩邊不能有空格,否則初始化變量時會出錯。# 如果有空格會怎樣?# "VARIABLE =value"# ^#% 腳本嘗試運行"VARIABLE"命令,參數為"="value"。# "VARIABLE= value"# ^#% 腳本嘗試運行"value"命令,將"VARIABLE"設置為空字符串。# ---------------------------------------echo hello    # hello# 對echo來說,這不是變量引用,只是字符串"hello"...echo $hello   # 375# ^# 這是變量引用。echo ${hello} # 375# ^# 同樣是變量引用。# 引用...echo "$hello"    # 375echo "${hello}"  # 375echohello="A B  C   D"echo $hello   # A B C Decho "$hello" # A B  C   D# 可以看到,echo $hello 和 echo "$hello" 的輸出結果不同。# =======================================# 引用變量時保留空格。# =======================================`echo '$hello' # $hello`:輸出變量 $hello,該變量被單引號括起來,因此不會進行變量替換。# 這演示了單引號的作用,即禁用變量引用,導致 $ 被解釋為字面量。# 注意不同類型引號的影響。hello= # 將變量 hello 設置為空值。echo "/$hello (null value) = $hello" # 輸出變量 $hello的值,該變量為空值。所以打印結果為 $hello (null value) = # 注意將變量設置為空值與取消設置變量不同,盡管最終結果相同(見下文)。# 允許在同一行設置多個變量,如果用空格分隔開。# 可能會導致舊版“sh”出現問題......# 如果變量中嵌入了空格,則需要使用雙引號包裹。numbers="one two three"echo "numbers = $numbers"other_numbers=1 2 3  # 會報錯說bash: 2: command not found# 使用雙引號包裹other_numbers="1 2 3" # 不會報錯echo "other_numbers = $other_numbers" # 此時輸出為:other_numbers = 1 2 3# 也可以用/符號,作為前導轉義空格mixed_bag=2/ ---/ Whatever # 設置變量 mixed_bag 的值,包含一個轉義空格。那么mixed_bag的值為"2 --- Whatever"這字符串。echo "$mixed_bag" # 2 --- Whatever`:輸出變量 mixed_bag 的值。echo; echo`:輸出空行。echo "uninitialized_variable = $uninitialized_variable" # 輸出變量 uninitialized_variable,該變量具有空值。uninitialized_variable= # 聲明,但不初始化它 -- #+ 與將其設置為 null 值相同,如上所述。echo "uninitialized_variable = $uninitialized_variable" # 輸出變量 uninitialized_variable,該變量仍然具有空值。uninitialized_variable=23 # 設置變量 uninitialized_variable 的值。unset uninitialized_variable # 取消設置變量 unitialized_variable。使用unset命令echo "uninitialized_variable = $unitialized_variable" # 輸出變量 uninitialized_variable,該變量已被取消設置,具有空值。exit 0

未賦值

以上例子中,未初始化的變量,有一個"null"值,不是字符串"null",而是未賦值的狀態。變量的為賦值狀態,可以用if [ -z "$xxxx" ] 的-z 參數去判斷。pem28資訊網——每日最新資訊28at.com

pem28資訊網——每日最新資訊28at.com

if [ -z "$unassigned" ]then  echo "/$unassigned is NULL."fi     # $unassigned is NULL.

直接使用未賦值的變量,可能引起一些問題,但可以對未賦值的變量做算數運算,達到初始化變量的效果。例如:pem28資訊網——每日最新資訊28at.com

echo "$uninitialized"     # 空行空變量let "uninitialized += 5"  # 將該空變量加 5 echo "$uninitialized"     # 現在該變量有值了,等于5# 注意# shell中,未初始化的變量沒有值。# 但在shell的算數運算中使用未初始化的變量,則該變量將被作為值等于0的變量使用。

參考資料:pem28資訊網——每日最新資訊28at.com

  • [1]第 5 章 詳細討論SHELL的引用: https://tldp.org/LDP/abs/html/abs-guide.html#QUOTING
  • [2]第 10.2 節 SHELL的參數: https://tldp.org/LDP/abs/html/abs-guide.html#PARAMETER-SUBSTITUTION

本文鏈接:http://www.www897cc.com/showinfo-26-59674-0.html基礎不牢地動山搖——shell中的變量和參數如何定義和使用?有什么注意點

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Rust 切片與 Go 有何區別?

下一篇: 一個用于批量給圖片增加水印的Python庫

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 仁寿县| 长泰县| 扶沟县| 陇南市| 安塞县| 休宁县| 嘉荫县| 揭东县| 潍坊市| 依兰县| 临湘市| 民县| 新邵县| 桂东县| 财经| 清水河县| 姚安县| 桐乡市| 沽源县| 繁昌县| 抚宁县| 贺兰县| 卓资县| 赤水市| 克东县| 眉山市| 银川市| 邻水| 凤山县| 崇礼县| 嘉兴市| 安溪县| 永嘉县| 十堰市| 洱源县| 天镇县| 江都市| 永福县| 吉安市| 石首市| 绵阳市|