您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Shell中命令替換的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Shell中命令替換的示例分析”這篇文章吧。
簡單的來說就是在 SHELL 內嵌套多條命令,一次性執行得到結果。
# echo `whoami`# echo $(whoami) # echo "hello,`whoami`"# echo "hello,$(whoami)"
# echo `cat ./gn2.txt` | sed -s "s;$; --list;"
使用 ``
讀取文件內容,再使用管道符二次處理后。執行!
注意:這里已經用了一層嵌套,以下多個小節會套用以實現二層嵌套。
a. 使用 "$()" 進行二層嵌套
b. 使用 "|" 進行命令導向
c. 注意事項以及解答一些疑問
可能有讀者已經注意到了,之前在簡單 SHELL 一層嵌套中說了嵌套還有另一種。那為什么不使用 ` `
進行嵌套。
根本的原因是:` `
不支持命令嵌套執行!
強制執行。也只能認出***組,其余按照空格作為間隔各個執行 或 按照管道符(含)直到末尾執行。
比較陳舊。容易與“單引號”混淆。
它是美式鍵盤左上角 ESC 下面的包含 ~
的反引號鍵!
已有替代品。$(...)
格式受到POSIX標準支持,也利于嵌套。
$()
可以多層嵌套類似 $($($()))
,但如果內部有一個` `
也是可以執行的喲(出于兼容考慮)!
之前我們介紹了
``
和$(...)
,這倆種命令執行。想來現在你一定對命令執行有比較深的理解了。現在,我們需要再進階一下~
1、 (cmd)
與 {var}
關于 ( )
與 { }
,和 命令替換
一樣都是 shell 擴展
父類下的相關概念。
提示:{}
頭部大括號右側必須有一個空格,尾部括號左側必須有分號結尾。
# ( echo firest;echo second; )# { echo third;echo fourth; }
注意: ( )
只是對一串命令重新開一個 子 shell 進行執行, { }
對一串命令在 當前 shell 執行。
2、()
與 {}
造成的影響
a. ()
括號內的語句影響在括號內
# var=source# ( echo $var;var=global;echo $var; )# echo $var
b. {}
括號內的語句影響到全局。
# echo $var# { echo $var;var=global;echo $var; }# echo $var
注意:{}
改變 var
的變量以后,外部也受到了影響。
參數擴展的基本格式是 ${ parameter }
,擴展的結果是 ${ parameter }
被替換為相應的值。
echo $1 $11echo $1 ${11}
首先解釋下 ${1..9}
是什么意思。在我們寫 Shell
時必不可免的需要傳遞參數以實現自定義變量。當超過阿拉伯數字 9
以后。就需要使用 ${ parameter }
明確告訴Shell
第 11
個參數是 ${11}
。
提示:上圖顯示 101
就是因為 $11
不滿足 [1-9]{1}
。系統將 11
拆分成 $1
和 1
,所以運算后結果是 101
。
ban=banecho a $bananaecho a ${ban}ana
這個實例中,我想輸出 banana
。已經定義了一個 ban
的變量為 ban
,只要加上 ana
就可以成為 “笨啦啦”。
但是很顯然的不加 {}
是無法做到使變量 $ban
配合 ana
顯示出 banana
的!
從官方定義上來說,我并不應該將 “變量擴展” 無中生有出來。
"
$
字符引入參數擴展,命令替換或算術擴展。" —— 官方手冊
主要是出于倆個方面考慮:
多數接受。國內出現了大量 ”變量擴展“ 的文章,多數人已經接受這個名稱。
便于理解。參數就是 ${...}
括號內的東西,而變量一詞可表示所有操作圍繞變量展開。
便于記錄。切分以后,對寫這篇文章的排版有幫助。亦可以從基礎、中級、高級有一定水平劃分。
實例:
var='This is one test sentence.'var1=parametervar2=word
現在我們有了這樣的一個句子,我希望做一些判斷、摘取(或者說:切片)或修改。我該如何操作?
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
進行替換。
提示: 在我測試的時候,我發現并不是全局生效的。
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}
將字符數量讀了出來。
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中命令替換的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。