shell 兩種變數的表示方法,大括號的作用

2021-05-23 00:18:26 字數 932 閱讀 5883

在shell中,取乙個變數值的方法——$varname的語法實際上是常用語法$的簡寫形式

個人倒感覺,加上這個大括號,雖然多寫了點東西,不過從後面的內容(畢竟我是先看的書嘛,後面的悄悄瞧了點)來看,還是有必要的。

為什麼會有兩種語法呢?

乙個原因是:當**中引用了多於9個位置引數,則必須使用常用語法$,而不是$10。

#/bin/bash

echo

"$# args"

echo

$1, $2,

$3,$4,

$5,$6,

$7,$8,

$9,$10

如果是這樣的話,執行./paramlist 1,2,3,4,5,6,7,8,9,0

得到的結果為:

10 args

1,2,3,4,5,6,7,8,9,10

如果執行./paramlist 1,2,3,4,5,6,7,8,9,a

得到的結果仍然為:

10 args

1,2,3,4,5,6,7,8,9,10

所以說,**中引用了多於9個位置引數時,則必須使用常用語法$而不是$10

另外讓我們考慮下面的情況,即使用者的變數名後面有乙個下劃線

echo

$uid_

shell會試圖使用uid_作為變數名。除非出現$uid_已經存在的偶然情況,否則該語句不會列印任何內容(為null或空字串)

要得到預期結果需要將該變數放入大括號內

echo$_

如果變數後面跟乙個非小字字串、數字或下劃線,則省略大括號就沒問題。

是不是很難懂?我也煩這種浪費腦細胞的話,

所以這句話翻譯**能聽得懂的話就是:

如果變數名後面要跟如下內容:非小寫字串(包括大小字串)、數字或下劃線,那麼變數名就一定要用大括號包起來

兩種attach to process的方法

背景 今天在做keepalive的實驗,設法模擬keepalive不成功的場景,從而達到 the local tcp will keep sending keep alive packet in an interval of keepaliveinterval for tcpmaxdataretra...

兩種attach to process的方法

背景 今天在做keepalive的實驗,設法模擬keepalive不成功的場景,從而達到 the local tcp will keep sending keep alive packet in an interval of keepaliveinterval for tcpmaxdataretra...

兩種排序方法

題目描述 考拉有n個字串字串,任意兩個字串長度都是不同的。考拉最近學習到有兩種字串的排序方法 1.根據字串的字典序排序。例如 car carriage cats doggies koala 2.根據字串的長度排序。例如 car cats koala doggies carriage 考拉想知道自己的...