今天寫指令碼,遇到awk指令碼向shell傳參的情況,上網谷歌一下,發現都有些麻煩,通過管道,通過eval,感覺都很複雜。於是想到用read來試一下。
首先構造乙個測試檔案test.txt,裡面的內容是1 2 3。
一開始嘗試
awk '' test.txt | read a b c
可是echo $a,發現為空,失敗了。
試了下
echo "1 2 3
" | read a b c
也無法給a b c 賦值
看來read不是這樣用的,怒谷歌之,在stackoverflow找到乙個類似的問題(stackoverflow真神器啊!)
裡面有答主提到,
read a < <(echo foo)
可以對a賦值,試了一下,果然可以。
然後嘗試
read a b c< <(echo foo goo hoo)
也可以分別對a b c進行賦值!太激動了!
之後嘗試
read a b c< <(awk '' test.txt)
失敗了,a的值變成了123,b,c為空。
這是為什麼?因為awk沒有列印空格,只列印123,理所當然都賦給a了。
所以,加上分隔符
read a b c< <(awk '' test.txt)
這下就成功了!
考慮到我的awk還要更複雜一些,再做些改造
read a b c< <(grep 1 test.txt | awk 'end')
也成功了!
所以,awk可以通過這樣的方式向shell傳值。
shell往awk傳引數
本文 記錄無限 www.gluoo.cn 今天在搞指令碼,需求是這樣的,有乙個檔案格式大概是這樣的 180 analyzer 20 job 1 需要按第一列的數值讀取這個檔案,比如第一行大於等於20的顯示出來,剛開始用的指令碼是這樣的 demo.sh bin bash threadhold 1 aw...
Shell 向shell指令碼傳參
我們可以在執行 shell 指令碼時,向指令碼傳遞引數,指令碼內獲取引數的格式為 n。n 代表乙個數字,1 為執行指令碼的第乙個引數,2 為執行指令碼的第二個引數,以此類推 傳遞到指令碼的引數個數 以下例項我們向指令碼傳遞三個引數,並分別輸出,其中 0 為執行的檔名 test.sh echo she...
向shell指令碼傳引數
執行 nano test.sh 建立乙個新的shell指令碼。指令碼test.sh的內容如下 bin sh name 1 echo the are great man 給新建立的test.sh的指令碼賦可執行許可權,命令為 chmod 755 test.sh 執行 test.sh xiao wang...