shell一些技巧和知識點

2021-09-02 10:58:29 字數 1193 閱讀 4178

; 表示的是乙個命令執行完, 忽略其返回值, 繼續執行下一行 

&& 表示只有前面為true才繼續執行後面的命令, 否則忽略, 可以理解為短路執行 

|| 表示子前面為false才繼續執行後面的命令, 這個比以前看到的解釋更容易理解 

凡是要輸出字串的, 最好用引號括起來, 否則容易被shell理解為命令, 這一點很容易疏忽 

{}是一種命令塊的寫法 

export用來將乙個變數公升級為環境變數 

str= 

這行**表示將str這個變數設定為null 

$ 這些操作忘記了, 還需要鞏固一下 

source會將script看成當前shell程序的一部分, 而不是生成乙個sub shell程序來執行指令碼, source用來載入公共的函式, 可以理解為import 

exec用來結束當前shell程序, 並重新生成乙個新的程序來執行指令碼 

()用來將多個命令放到乙個sub shell程序中去執行, 可以理解為將表示式變成函式 

{} 理解成匿名函式吧, 一般在awk中常見 

$()和``是一回事, 不過前者辨識度更高, 建議常用, 後者容易與''混淆, 另外乙個前者巢狀起來更簡單, 不過前者移植性較差 

${}除了用來界定變數之外, 還有乙個功能實現字串變數的substring操作, #表示去掉左邊的, %表示去掉右邊的, 單數表示最小匹配, 雙數表示最大匹配, 可以通過鍵盤上#和%相對於$的位置來記憶, linux上的命令引數大部分記憶起來很傷腦筋:( 

${}還可以用來設定預設值, 這塊更複雜, 不記也罷 

$用來計算變數的字元長度 

()的另乙個作用是用來定義乙個陣列, 而針對陣列的訪問則利用的是, 注意陣列的下標base是0, 另外@用來表示全部, 可以理解為all 

$(())只針對算數和邏輯運算, 裡面的變數可以不用帶上$字首, 當然帶上也不為錯 

shell中的0表示true, 非零表示false 

(())用來直接進行運算, 會讓我們的**更簡潔, 比如變數不用加$字首 

$0表示的是指令碼路徑, $1...n代表的是指令碼路徑之後的引數 

函式可以理解為指令碼中的指令碼, 不過函式中$0表示的仍然是指令碼路徑, 而不是函式名 

$10不是表示第十個引數而是第乙個引數後面帶乙個0 

一般#跟數量關係比較大, 比如$表示變數長度, 而$#表示引數個數, 測試是否有傳引數 [ $# = 0 ] 

一些知識點

字串拼接 1.a join b a為元素之間的分隔符,b為待分割的序列 可用於輸出時的資料處理,元素間有空格,末尾沒有 2 s s s str1,str2,str3 前半部分為字串,後半部分為索引。用於引入,s是物件 3.format str1,str2,str3 與f 括號裡為已有變數 關於for...

一些知識點

1.vector是在堆上還是棧上?在堆上.2.我們發現指標有一些 似是而非 的特徵 1 指標消亡了,並不表示它所指的記憶體會被自動釋放。比如函式中的指標是區域性變數,如果它指向了堆上,而自己出了函式後消亡了,但它所指向的記憶體還是存在的,導致了記憶體洩漏.2 記憶體被釋放了,並不表示指標會消亡或者成...

一些知識點

1 sln 解決方案檔案 csproj 專案檔案 cs 原始檔 解決方案包含多個專案,每個專案都是乙個程式。config 配置檔案 3 const int a 1 const 定義乙個量為常量,運算中用到當常量使用,不可以再重新賦值。4 型別轉換。1 隱式轉換。從值型別轉換成引用型別。從引用型別轉換...