91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell中命令替換的示例分析

發布時間:2021-10-23 17:41:22 來源:億速云 閱讀:196 作者:小新 欄目:系統運維

這篇文章主要為大家展示了“Shell中命令替換的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Shell中命令替換的示例分析”這篇文章吧。

什么是命令替換

簡單的來說就是在 SHELL 內嵌套多條命令,一次性執行得到結果。

1、一層 SHELL 嵌套
# echo `whoami`# echo $(whoami) # echo "hello,`whoami`"# echo "hello,$(whoami)"

Shell中命令替換的示例分析

2、二層 SHELL 嵌套
# echo `cat ./gn2.txt` | sed -s "s;$; --list;"

使用 ``讀取文件內容,再使用管道符二次處理后。執行!

注意:這里已經用了一層嵌套,以下多個小節會套用以實現二層嵌套。

a. 使用 "$()" 進行二層嵌套

Shell中命令替換的示例分析

b. 使用 "|" 進行命令導向

Shell中命令替換的示例分析

c. 注意事項以及解答一些疑問

可能有讀者已經注意到了,之前在簡單 SHELL 一層嵌套中說了嵌套還有另一種。那為什么不使用 ` ` 進行嵌套。

  • 根本的原因是:` ` 不支持命令嵌套執行!

    • 強制執行。也只能認出***組,其余按照空格作為間隔各個執行 或 按照管道符(含)直到末尾執行。

  • 比較陳舊。容易與“單引號”混淆。

    • 它是美式鍵盤左上角 ESC 下面的包含 ~ 的反引號鍵!

  • 已有替代品。$(...) 格式受到POSIX標準支持,也利于嵌套。

    • $() 可以多層嵌套類似 $($($())) ,但如果內部有一個` ` 也是可以執行的喲(出于兼容考慮)!

3、進階

之前我們介紹了 ``$(...) ,這倆種命令執行。

想來現在你一定對命令執行有比較深的理解了。現在,我們需要再進階一下~

1、 (cmd){var}

關于 ( ){ },和 命令替換 一樣都是 shell 擴展 父類下的相關概念。

提示:{} 頭部大括號右側必須有一個空格,尾部括號左側必須有分號結尾。

# ( echo firest;echo second; )# { echo third;echo fourth; }

Shell中命令替換的示例分析

注意: ( ) 只是對一串命令重新開一個 子 shell 進行執行, { } 對一串命令在 當前 shell 執行。

2、(){} 造成的影響

a. () 括號內的語句影響在括號內

# var=source# ( echo $var;var=global;echo $var; )# echo $var

Shell中命令替換的示例分析

b. {} 括號內的語句影響到全局。

# echo $var# { echo $var;var=global;echo $var; }# echo $var

Shell中命令替換的示例分析

注意:{} 改變 var 的變量以后,外部也受到了影響。

什么是參數擴展

參數擴展的基本格式是 ${ parameter },擴展的結果是 ${ parameter }被替換為相應的值。

1、實例一
echo $1 $11echo $1 ${11}

Shell中命令替換的示例分析

首先解釋下 ${1..9} 是什么意思。在我們寫 Shell 時必不可免的需要傳遞參數以實現自定義變量。當超過阿拉伯數字 9 以后。就需要使用 ${ parameter } 明確告訴Shell11 個參數是 ${11}

提示:上圖顯示 101 就是因為 $11 不滿足 [1-9]{1} 。系統將 11 拆分成 $11 ,所以運算后結果是 101

2、實例二
ban=banecho a $bananaecho a ${ban}ana

Shell中命令替換的示例分析

這個實例中,我想輸出 banana 。已經定義了一個 ban 的變量為 ban ,只要加上 ana 就可以成為 “笨啦啦”。

但是很顯然的不加 {} 是無法做到使變量 $ban 配合 ana 顯示出 banana 的!

什么是變量擴展

從官方定義上來說,我并不應該將 “變量擴展” 無中生有出來。

" $ 字符引入參數擴展,命令替換或算術擴展。" —— 官方手冊

主要是出于倆個方面考慮:

  • 多數接受。國內出現了大量 ”變量擴展“ 的文章,多數人已經接受這個名稱。

  • 便于理解。參數就是 ${...} 括號內的東西,而變量一詞可表示所有操作圍繞變量展開。

  • 便于記錄。切分以后,對寫這篇文章的排版有幫助。亦可以從基礎、中級、高級有一定水平劃分。

實例:

var='This is one test sentence.'var1=parametervar2=word

現在我們有了這樣的一個句子,我希望做一些判斷、摘取(或者說:切片)或修改。我該如何操作?

1、變量替換

a. ${parameter:-word}

# echo ${var1:-$var2}parameter# var1=# echo ${var1:-$var2}word

如果 var1 未設置或為空,則替換成 var2

b. ${parameter:=word}

同上。位置參數和特殊參數不能以這種方式分配。

c. ${parameter:?word}

# var1=# echo ${var1:?var2}bash: var1: var2# echo $?1

當變量 var1 未設置或為空,shell 也是可交互時,進行報錯并且退出。如果 shell 不可交互,則發生變量替換。

d. ${parameter:+word}

# echo $var1parameter# echo $var2word# echo ${var1:+$var2}word# echo $var1parameter

如果 var1 為空或未設置,那么就什么都不做。不然使用 var2 進行替換。

提示: 在我測試的時候,我發現并不是全局生效的。

2、變量切片

a. 范圍切片(同方向)

# echo ${var:8:17}one test sentence

注意:倆個數字都是從頭開始數的。

b. 范圍切片(非同向)

# echo ${var:8:-1}one test sentence# echo ${var:8:(-1)}one test sentence

提示:倆種寫法都是正確的。

c. 切片位置

# a='This is one'# echo ${#a}11

提示 :首先建立變量 a='This is one' ,然后使用 echo ${#a} 將字符數量讀了出來。

3、變量修改

a. 簡單修改

# echo ${var}This is one test sentence.# echo ${var/one/a}This is a test sentence.

提示:個人認為這種是***的方式了,可以范圍式修改(包含刪除)。

b. 簡單刪除

# echo ${var%sentence.}This is one test
# echo ${var#This is}one test sentence.

c. 附:表格

< 如顯示不全,請左右滑動 >
變量設置方式說明
${變量#關鍵字}若變量內容從開始的數據符合“關鍵字”,則將符合的最數據刪除
${變量##關鍵字}若變量內容從開始的數據符合“關鍵字”,則將符合的最數據刪除
${變量%關鍵字}若變量內容從開始的數據符合“關鍵字”,則將符合的最數據刪除
${變量%%關鍵字}若變量內容從開始的數據符合“關鍵字”,則將符合的最數據刪除
${變量/舊字符串/新字符串}若變量內容符合“舊字符串”,則***舊字符會被新字符替換
${變量/舊字符串//新字符串}若變量內容符合“舊字符串”,則全部舊字符會被新字符替換

以上是“Shell中命令替換的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤峰县| 阳西县| 伊宁市| 闽清县| 天长市| 体育| 招远市| 云安县| 独山县| 富源县| 锡林郭勒盟| 广南县| 通江县| 恩施市| 乌鲁木齐县| 庆城县| 讷河市| 达州市| 丰镇市| 安化县| 沙河市| 漳州市| 巴楚县| 河间市| 建瓯市| 兴国县| 兴宁市| 大渡口区| 耿马| 刚察县| 竹北市| 达拉特旗| 尉犁县| 英吉沙县| 普洱| 察雅县| 余庆县| 长垣县| 社旗县| 大同市| 六枝特区|