如何在 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}