shell 使用管道符時變數的問題

2021-10-07 08:12:51 字數 773 閱讀 3686

使用管道符計算檔案行數指令碼如下:

#!/bin/sh

linenum=0

cat test | while read line

doecho "line content: $line"

((linenum+=1))

done

echo "line number: $linenum"

輸出結果為

line content: 1

line content: 2

line content: 3

line content: 4

line content: 5

line number: 0

使用重定向計算檔案函式指令碼如下:

#!/bin/sh

linenum=0

while read line

doecho "line content: $line"

((linenum+=1))

done < test

echo "line number: $linenum"

輸出結果為

line content: 1

line content: 2

line content: 3

line content: 4

line content: 5

line number: 5

分析結果:

使用管道符時,會fork出乙個子程序,變數在父子程序裡無法互通。使用第二種方式,在同乙個程序中,所以達到了我們預期的目的。

shell基礎之管道符和變數

管道符和變數 一 管道符和作業命令 1.txt wc l cat 1.txt greap aaa 管道符的命令就是把前面輸出的結果交給後面的命令 2.ctrl z 暫停乙個任務 3.jobs檢視後台的任務 4.bg id 把任務調到後台,使它到後台執行background執行多個任務要使用bg 1 ...

expect 互動時 管道符的問題

今天同事說expect互動出了問題,無法呼叫gzip解壓匯入資料庫,但是手動執行卻沒問題 先來看看問題 usr bin expect set timeout 10000 spawn zcat db xd 20220208 133003.sql.gz mysql u xd p xd expect re...

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

寫個監控採集指令碼有一處使用了管道符,執行結果出乎意料,特來mark下 結論 管道符和括號會fork出乙個子程序,如果在子程序的工作區間內呼叫exit則退出的只是當前的子程序,不會退出主程序 測試管道符 cat test.sh bin bash function work pipeline func...