Posted on 2010-04-12 19:10
Prayer 閱讀(1214)
評論(0) 編輯 收藏 引用 所屬分類:
Shell
假設當前目錄下有a.log b.log二個文件,利用awk打印出其文件名,腳本如下:
#! /bin/bash
for file in *.log
do
awk 'BEGIN{var=" ' "$file" ' "}END{print var;}' "$file"
done
在這里最讓人混淆的是單引號和雙引號
我們可以利用bash -x test.sh來執行腳本,其會將腳本中的shell變量展開,便于調試
’單引號中除(’)都為原本字符,沒有特殊意義
"雙引號中除(
$`")
都為原本字符,沒有特殊意義
因此,上述可以展開為:
第一次:
awk 'BEGIN{var="a.log"}END{print var;}‘ a.log
第二次:
awk 'BEGIN{var="b.log"}END{print var;}‘ b.log
如果將其寫成 awk 'BEGIN{var=' "$file" '}END{print var;}' "$file",則展開為:
第一次:
awk 'BEGIN{var=a.log}END{print var;}‘ a.log
第二次:
awk 'BEGIN{var=b.log}END{print var;}‘ b.log
會報錯,因為awk中字符串要用雙引號括起來
將其分解成以下這樣,便于理解:
'BEGIN{var=" ' "$file" ' "}END{print var;}' 這三部分為字符串連接關系