Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux Shell awk 取得外部變數三大方法:-v 參數、命令列賦值與 ENVIRON

編輯:Linux 教學

awk 提供正則比對、樣式裝載、流程控制、數學運算、進程控制、內建變數與函數,堪稱完整程式語言。處理文字速度驚人,許多 Shell 日誌分析工具皆可用 awk 實現。本文專講如何將外部變數傳入 awk 執行陳述句。

基礎語法

awk [ -F re] [parameter...] ['pattern {action}' ] [-f progfile] [in_file...]

兩個特殊樣式 BEGIN 與 END:BEGIN 區塊在掃描輸入前執行(初始化變數),END 區塊在掃描完所有輸入後執行(輸出結果)。

echo 'awk code' | awk 'BEGIN{print "start\n============="}{print $0}END{print "=========\nend"}'
start
=============
awk code
=========
end

方法一:命令列直接賦值(無法在 BEGIN 使用)

test='awk code'
echo | awk '{print test}' test="$test"
awk code

格式:awk '{action}' 變數名=變數值,變數放在 '{action}' 之後。此法在 BEGIN 區塊無法取得值:

echo | awk 'BEGIN{print test}' test="$test"
# 無輸出

方法二:-v 參數(可在 BEGIN、主區塊、END 均可用)

test='awk code'
echo | awk -v test="$test" 'BEGIN{print test}'
awk code
echo | awk -v test="$test" '{print test}'
awk code

格式:awk -v 變數名=變數值 [-v 變數2=值2 ...] 'BEGIN{action}'。-v 必須放在 action 之前。

方法三:ENVIRON 內建關聯陣列(直接讀取環境變數)

awk 'BEGIN{for (i in ENVIRON) {print i"="ENVIRON[i];}}'
AWKPATH=.:/usr/share/awk
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
LANG=en_US.UTF-8
...

ENVIRON 為關聯陣列,環境變數名即鍵值,直接存取無需額外傳遞。

總結比較

方法語法位置BEGIN 可用適用場景
命令列賦值action 之後否簡單腳本、非 BEGIN 階段
-v 參數action 之前是需在 BEGIN 初始化、多變數傳遞
ENVIRON腳本內部直接用是讀取系統環境變數、無需外部傳遞
Copyright © Windows教程網 All Rights Reserved