假設當前目錄下有a.log b.log二個檔案,利用awk列印出其檔名,指令碼如下:
#! /bin/bash
for file in *.log
doawk 'beginend' "$file"
done
在這裡最讓人混淆的是單引號和雙引號
我們可以利用bash -x test.sh來執行指令碼,其會將指令碼中的shell變數展開,便於除錯
』單引號中除(』)都為原本字元,沒有特殊意義
"雙引號中除($`")都為原本字元,沒有特殊意義
因此,上述可以展開為:
第一次:
awk 'beginend『 a.log
第二次:
awk 'beginend『 b.log
如果將其寫成 awk 'beginend' "$file",則展開為:
第一次:
awk 'beginend『 a.log
第二次:
awk 'beginend『 b.log
會報錯,因為awk中字串要用雙引號括起來
將其分解成以下這樣,便於理解:
'beginend' 這三部分為字串連線關係
awk如何向shell傳值
今天寫指令碼,遇到awk指令碼向shell傳參的情況,上網谷歌一下,發現都有些麻煩,通過管道,通過eval,感覺都很複雜。於是想到用read來試一下。首先構造乙個測試檔案test.txt,裡面的內容是1 2 3。一開始嘗試 awk test.txt read a b c 可是echo a,發現為空,...
shell 向 awk 傳遞變數引數
本文翻譯自stackoverflow提問 how do i use shell variables in an awk script?但更改了文章段落結構和部分表述。使用 v選項 p.s.記得在選項和變數名之間加上空格 variable line one nline two awk v var va...
如何向GLSL中傳入多個紋理
如何向glsl中傳入多個紋理 如下程式,我們在glsl的fragment著色程式中定義了3個sample2d作為紋理引數。cpp view plain copy uniform sampler2d basemap uniform sampler2d reflectmap uniform sample...