怎樣向awk中傳入shell變數值

2021-05-08 01:59:57 字數 958 閱讀 4133

假設當前目錄下有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...