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

當(dāng)前位置:首頁 > 科技  > 軟件

基礎(chǔ)不牢地動(dòng)山搖——shell中的變量和參數(shù)如何定義和使用?有什么注意點(diǎn)

來源: 責(zé)編: 時(shí)間:2024-01-10 09:35:51 239觀看
導(dǎo)讀Shell中的變量和參數(shù)如何定義和使用?變量是編程和腳本語言表示數(shù)據(jù)的方式。變量其實(shí)不僅僅是一個(gè)標(biāo)簽,一個(gè)分配給計(jì)算機(jī)內(nèi)存中保存項(xiàng)目的位置或位置集的數(shù)據(jù)的標(biāo)簽,變量沒有其他意義。變量出現(xiàn)在算術(shù)運(yùn)算和和數(shù)量操作中,

Shell中的變量和參數(shù)如何定義和使用?zNh28資訊網(wǎng)——每日最新資訊28at.com

變量是編程和腳本語言表示數(shù)據(jù)的方式。變量其實(shí)不僅僅是一個(gè)標(biāo)簽,一個(gè)分配給計(jì)算機(jī)內(nèi)存中保存項(xiàng)目的位置或位置集的數(shù)據(jù)的標(biāo)簽,變量沒有其他意義。zNh28資訊網(wǎng)——每日最新資訊28at.com

變量出現(xiàn)在算術(shù)運(yùn)算和和數(shù)量操作中,以及字符串解析時(shí)。zNh28資訊網(wǎng)——每日最新資訊28at.com

zNh28資訊網(wǎng)——每日最新資訊28at.com

Shell中的變量是什么?

變量的名稱是對(duì)它所持有的數(shù)據(jù)的占位符(代名詞)。引用(檢索)其值稱為變量替換。獲取變量值使用美元符號(hào):zNh28資訊網(wǎng)——每日最新資訊28at.com

$

讓我們仔細(xì)區(qū)分變量的 名稱 及 變量值。如果 variable1 是 變量,則 $variable 是對(duì)其值的引用, 它包含的數(shù)據(jù)項(xiàng)。zNh28資訊網(wǎng)——每日最新資訊28at.com

從技術(shù)上講,變量的名稱稱為左值,這意味著它出現(xiàn) 在作業(yè)的左側(cè) 語句,如 VARIABLE=23 所示。變量的值為 右值,這意味著 它出現(xiàn)在賦值語句的右側(cè),如 VAR2=$VARIABLE。事實(shí)上,變量的名稱是引用,是指向內(nèi)存的指針,即該變量的值被保留在變量指向的內(nèi)存位置起始的內(nèi)存字節(jié)空間中。zNh28資訊網(wǎng)——每日最新資訊28at.com

zNh28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

示例 32-5:shell的變量與信號(hào)zNh28資訊網(wǎng)——每日最新資訊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 語句中:zNh28資訊網(wǎng)——每日最新資訊28at.com

#!/bin/bash# 讀取用戶輸入echo "請(qǐng)輸入你的名字:"read name# 輸出用戶輸入的內(nèi)容echo "你輸入的名字是:$name"

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

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

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

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

var1=123echo '$var1'# 輸出結(jié)果為 $var1, 也就是原原本本,未做變量替換。echo "$var1"# 輸出結(jié)果為123, 也就是雙引號(hào)有會(huì)按變量替換。

單引號(hào)內(nèi)的變量效果是全引用,有時(shí)稱為“強(qiáng)”引用。請(qǐng)參閱第 5 章 詳細(xì)討論SHELL的引用[1]。zNh28資訊網(wǎng)——每日最新資訊28at.com

請(qǐng)注意,$variable實(shí)際上是 ${variable} 的簡(jiǎn)化形式。在有的shell上下文中  語法會(huì)導(dǎo)致錯(cuò)誤,那時(shí)使用{variable}`形式可能是推薦的做法(請(qǐng)參閱下面的第 10.2 節(jié) SHELL的參數(shù)[2])。zNh28資訊網(wǎng)——每日最新資訊28at.com

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

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

未賦值

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

zNh28資訊網(wǎng)——每日最新資訊28at.com

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

直接使用未賦值的變量,可能引起一些問題,但可以對(duì)未賦值的變量做算數(shù)運(yùn)算,達(dá)到初始化變量的效果。例如:zNh28資訊網(wǎng)——每日最新資訊28at.com

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

參考資料:zNh28資訊網(wǎng)——每日最新資訊28at.com

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

本文鏈接:http://www.www897cc.com/showinfo-26-59674-0.html基礎(chǔ)不牢地動(dòng)山搖——shell中的變量和參數(shù)如何定義和使用?有什么注意點(diǎn)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Rust 切片與 Go 有何區(qū)別?

下一篇: 一個(gè)用于批量給圖片增加水印的Python庫(kù)

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 盧偉冰長(zhǎng)文解析K60至尊版 對(duì)Redmi有著里程碑式的意義

    在今天的Redmi后性能時(shí)代戰(zhàn)略發(fā)布會(huì)結(jié)束之后,Redmi總經(jīng)理盧偉冰又帶來了一篇長(zhǎng)文,詳解了為什么 Redmi 要開啟后性能時(shí)代?為什么選擇和 MediaTek、Pixelworks 深度合作?以及后性
  • 6月安卓手機(jī)性能榜:vivo/iQOO霸占旗艦排行榜前三

    2023年上半年已經(jīng)正式過去了,我們也迎來了安兔兔V10版本,在新的驍龍8Gen3和天璣9300發(fā)布之前,性能榜的榜單大體會(huì)以驍龍8Gen2和天璣9200+為主,至于那顆3.36GHz的驍龍8Gen2領(lǐng)先
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個(gè)線程之間通過某種機(jī)制進(jìn)行協(xié)調(diào)和交互,例如,線程等待和通知機(jī)制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實(shí)現(xiàn)手段有以下幾種方式:Object 類下
  • SpringBoot中使用Cache提升接口性能詳解

    環(huán)境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對(duì) Spring 應(yīng)用程序提供了透明式添加緩存的支持。和事務(wù)支持一樣,抽象緩存允許一致地使用各
  • 不容錯(cuò)過的MSBuild技巧,必備用法詳解和實(shí)踐指南

    一、MSBuild簡(jiǎn)介MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應(yīng)用程序中自動(dòng)化構(gòu)建過程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個(gè)月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當(dāng)時(shí)用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 破圈是B站頭上的緊箍咒

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之每年的暑期檔都少不了瞄準(zhǔn)追劇女孩們的古偶劇集,2021年有優(yōu)酷的《山河令》,2022年有愛奇藝的《蒼蘭訣》,今年卻輪到小破站抓住了追
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬

    來源 | 電商在線文|易琬玉編輯|斯問受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、“Ringdoll戒之人形”淘寶店鋪有關(guān)外貌的評(píng)價(jià),黃山已經(jīng)聽累了。生于1985年的他,哪
  • 聯(lián)想YOGA 16s 2022筆記本將要推出,屏幕支持觸控功能

    聯(lián)想此前宣布,將于11月2日19:30召開聯(lián)想秋季輕薄新品發(fā)布會(huì),推出聯(lián)想 YOGA 16s 2022 筆記本等新品。官方稱,YOGA 16s 2022 筆記本將搭載 16 英寸屏幕,并且是一
Top 主站蜘蛛池模板: 荆州市| 温泉县| 溧阳市| 济宁市| 永丰县| 庄河市| 宁国市| 当阳市| 金川县| 张家川| 弋阳县| 宜川县| 南郑县| 玉树县| 怀集县| 五莲县| 汉寿县| 万盛区| 义乌市| 永寿县| 沙湾县| 湖口县| 龙山县| 固安县| 山东省| 抚州市| 宁南县| 新干县| 英山县| 肃宁县| 白城市| 诏安县| 株洲县| 邮箱| 洞头县| 龙陵县| 乌兰浩特市| 宝兴县| 灵石县| 龙陵县| 宁陕县|