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

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

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

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

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

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

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

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

Shell中的變量是什么?

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

$

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

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

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

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

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

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

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

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

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

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

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

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

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

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

請(qǐng)注意,$variable實(shí)際上是 ${variable} 的簡(jiǎn)化形式。在有的shell上下文中  語(yǔ)法會(huì)導(dǎo)致錯(cuò)誤,那時(shí)使用{variable}`形式可能是推薦的做法(請(qǐng)參閱下面的第 10.2 節(jié) SHELL的參數(shù)[2])。PcD28資訊網(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來(lái)說(shuō),這不是變量引用,只是字符串"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)括起來(lái),因此不會(huì)進(jìn)行變量替換。# 這演示了單引號(hào)的作用,即禁用變量引用,導(dǎo)致 $ 被解釋為字面量。# 注意不同類(lèi)型引號(hào)的影響。hello= # 將變量 hello 設(shè)置為空值。echo "/$hello (null value) = $hello" # 輸出變量 $hello的值,該變量為空值。所以打印結(jié)果為 $hello (null value) = # 注意將變量設(shè)置為空值與取消設(shè)置變量不同,盡管最終結(jié)果相同(見(jiàn)下文)。# 允許在同一行設(shè)置多個(gè)變量,如果用空格分隔開(kāi)。# 可能會(huì)導(dǎo)致舊版“sh”出現(xiàn)問(wèn)題......# 如果變量中嵌入了空格,則需要使用雙引號(hào)包裹。numbers="one two three"echo "numbers = $numbers"other_numbers=1 2 3  # 會(huì)報(bào)錯(cuò)說(shuō)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ù)去判斷。PcD28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

參考資料:PcD28資訊網(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)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

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

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

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 印度登月最關(guān)鍵一步!月船三號(hào)今晚進(jìn)入環(huán)月軌道

    8月5日消息,據(jù)印度官方消息,月船三號(hào)將于北京時(shí)間今晚21時(shí)30分左右開(kāi)始近月制動(dòng)進(jìn)入環(huán)月軌道。這是該探測(cè)器能夠成功的最關(guān)鍵步驟之一,如果成功將開(kāi)始圍
  • 之家push系統(tǒng)迭代之路

    前言在這個(gè)信息爆炸的互聯(lián)網(wǎng)時(shí)代,能夠及時(shí)準(zhǔn)確獲取信息是當(dāng)今社會(huì)要解決的關(guān)鍵問(wèn)題之一。隨著之家用戶(hù)體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動(dòng)拉"獲取信息的方式已不能滿(mǎn)足用
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級(jí)

    來(lái)源 | 伯虎財(cái)經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報(bào)道,拼多多旗下跨境電商平臺(tái)Temu正對(duì)競(jìng)爭(zhēng)對(duì)手SHEIN提起新訴訟,訴狀稱(chēng)Shein“利用市場(chǎng)支配力量強(qiáng)迫服裝廠(chǎng)商與之簽訂獨(dú)家
  • 小米MIX Fold 3配置細(xì)節(jié)曝光:搭載領(lǐng)先版驍龍8 Gen2+罕見(jiàn)5倍長(zhǎng)焦

    這段時(shí)間以來(lái),包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 三星獲批量產(chǎn)iPhone 15全系屏幕:蘋(píng)果史上最驚艷直屏

    按照慣例,蘋(píng)果將繼續(xù)在今年9月舉辦一年一度的秋季新品發(fā)布會(huì),有傳言稱(chēng)發(fā)布會(huì)將于9月12日舉行,屆時(shí)全新的iPhone 15系列將正式與大家見(jiàn)面,不出意外的話(huà)
  • OPPO K11搭載長(zhǎng)壽版100W超級(jí)閃充:26分鐘充滿(mǎn)100%

    據(jù)此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發(fā)布會(huì),屆時(shí)全新的OPPO K11將正式與大家見(jiàn)面,將主打旗艦影像,和同檔位競(jìng)品相比,其最大的賣(mài)
  • 上海舉辦人工智能大會(huì)活動(dòng),建設(shè)人工智能新高地

    人工智能大會(huì)在上海浦江兩岸隆重拉開(kāi)帷幕,人工智能新技術(shù)、新產(chǎn)品、新應(yīng)用、新理念集中亮相。8月30日晚,作為大會(huì)的特色活動(dòng)之一的上海人工智能發(fā)展盛典人工
  • “買(mǎi)真退假” 這種“羊毛”不能薅

    □ 法治日?qǐng)?bào) 記者 王春   □ 本報(bào)通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個(gè)大學(xué)生兼職QQ群。群主“七王”在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 炉霍县| 涟源市| 平泉县| 塔河县| 黄龙县| 双牌县| 池州市| 嘉黎县| 麻江县| 邻水| 定陶县| 瑞安市| 桑日县| 钦州市| 余姚市| 靖西县| 通道| 新野县| 亚东县| 彭阳县| 蚌埠市| 射洪县| 海林市| 大埔县| 商都县| 郑州市| 达拉特旗| 辽阳市| 德庆县| 绥芬河市| 桦南县| 沽源县| 阿坝| 锦屏县| 济宁市| 平阴县| 原平市| 阳高县| 建宁县| 康保县| 滕州市|