如何將先前定義的變數傳遞給 bash 中的 awk?例如,
hostname="server1" cat /etc/passwd | awk -F":" '{print $1 " of $hostname"}
預期輸出是
root of server1
sys of server1
......
...... // for all user accounts
但我得到的是
root of $hostname
sys of $hostname
答案1
您有一個引用問題:
將字元括在單引號 (''') 中可保留引號內每個字元的字面值。單引號之間不能出現單引號,即使前面有反斜線也是如此。
(從Bash 參考手冊)。
您需要做的就是放在$hostname
單引號之外:
cat /etc/passwd | awk -F":" '{print $1 " of '$hostname'"}'
或使用雙引號並使用以下命令轉義某些字元\
:
cat /etc/passwd | awk -F":" "{print \$1 \" of $hostname\"}"
答案2
awk
有一個內建變數選項-v
。
cat /etc/passwd | awk -F":" -v hostname="server1" '{print $1 " of " hostname}