Wie kann ich eine zuvor definierte Variable in Bash an awk übergeben? Zum Beispiel:
hostname="server1" cat /etc/passwd | awk -F":" '{print $1 " of $hostname"}
Und die erwartete Ausgabe ist
root of server1
sys of server1
......
...... // for all user accounts
Aber was ich bekomme ist
root of $hostname
sys of $hostname
Antwort1
Sie haben ein Zitierproblem:
Wenn Sie Zeichen in einfache Anführungszeichen (''') einschließen, bleibt der Literalwert jedes Zeichens innerhalb der Anführungszeichen erhalten. Zwischen einfachen Anführungszeichen darf kein einfaches Anführungszeichen stehen, auch nicht, wenn ein Backslash davor steht.
(ausBash-Referenzhandbuch).
Sie müssen lediglich Folgendes $hostname
außerhalb der einfachen Anführungszeichen einfügen:
cat /etc/passwd | awk -F":" '{print $1 " of '$hostname'"}'
oder verwenden Sie doppelte Anführungszeichen und maskieren Sie einige Zeichen mit \
:
cat /etc/passwd | awk -F":" "{print \$1 \" of $hostname\"}"
Antwort2
awk
hat eine eingebaute variable Option mit -v
.
cat /etc/passwd | awk -F":" -v hostname="server1" '{print $1 " of " hostname}