以前に定義した変数を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}