shell中使用管道符需要注意的點

2022-09-08 20:24:13 字數 872 閱讀 3112

寫個監控採集指令碼有一處使用了管道符,執行結果出乎意料,特來mark下

結論:管道符和括號會fork出乙個子程序,如果在子程序的工作區間內呼叫exit則退出的只是當前的子程序,不會退出主程序

測試管道符

cat test.sh

#!/bin/bash

function

work_pipeline()

function

work_quote()

function

main()

main

執行結果

工作函式work_pipeline 在mian函式中被呼叫了兩次,每次工作函式在遇到2後都會執行exit,但是exit退出的是子程序

sh test.sh12

3i'm going to exit12

3i'm going to exit

如果想達到退出主程序的功能需要使用work_quote函式

# 將main函式改寫成

function main()

# 執行結果

1

23i'm going to exit

測試括號

和管道符一樣會建立子程序,exit退出的只是子程序

# 將main函式改寫成

function main()

# 執行結果12

3i'm going to exit

1

23i'm going to exit

補充乙個錯誤使用重定向的案例

ll >t.txt &>/dev/null

# t.txt會為空

sql server中使用組合索引需要注意的地方

一 使用組合索引需要注意的地方 1 索引應該建在選擇性高的字段上 鍵值唯一的記錄數 總記錄條數 選擇性越高索引的效果越好 價值越大,唯一索引的選擇性最高 2 組合索引中字段的順序,選擇性越高的字段排在最前面 如果把低選擇性的列放在最左端,可能會造成無法使用該索引的情況。3 where條件中包含兩個選...

C 中使用巨集需要注意的規範

如 define rectangle area a,b a b define rectangle area a,b a b 主要原因就是由於巨集替換的時候只是簡單的字元替換,如果我們不使用完備的括號,那麼很有可能或造成結果和我們想要得到的表示式不同.在某種程度上帶參的巨集定義與函式有幾分類似。但是必...

python中使用list的刪除需要注意

casenum int input for k in range casenum ans 0 n int input buildings list map int,input split while buildings 如果開始的列表中還有值 magicalset set for i in rang...