2010-03-22 18 views
8

mein Problem zu veranschaulichen,ein Bash-Variable in awk Rohrleitungen und Speicher die Ausgabe

TEST="Hi my name is John" 
OUTP=`echo $TEST | awk '{print $3}'` 
echo $OUTP 

Was ich dies würde erwarten, zu tun, um den $ TEST Variable in awk übergeben und speichern das dritte Wort in $ OUTP.

Stattdessen bekomme ich "Hallo: nicht gefunden", als ob erwartet wird, dass die Eingabe eine Datei ist. Wenn ich jedoch nur eine Zeichenfolge anstelle einer Variablen übergebe, gibt es kein Problem. Was wäre der beste Weg, um dies zu erreichen?

Vielen Dank!

+0

es funktioniert gut für mich! – Vijay

+0

Verwenden Sie Backticks, um TEST zuzuweisen. Kopieren und Einfügen aus dem Skript, das den Fehler gibt –

Antwort

17
#!/bin/bash 
TEST="Hi my name is John" 
set -- $TEST 
echo $3 

#!/bin/bash 
TEST="Hi my name is John" 
var=$(echo $TEST|awk '{print $3}') 
echo $var 
+0

nice Verwendung von 'set -' –

+0

Dies scheint in der Eingabeaufforderung zu funktionieren, aber wenn als Shell-Skript ausgeführt, bekomme ich immer noch Hi: nicht gefunden. Irgendeine Möglichkeit, das zu beheben? Vielen Dank! –

+0

EDIT: Nevermind, ich legte einen zusätzlichen Platz vor dem $ bei der Einstellung der Variablen. Vielen Dank für die Hilfe! –

1

Wie bei anderen funktioniert das für mich wie sie ist, aber vielleicht doppelte Anführungszeichen Zugabe (") um $TEST in Zeile 2 würde helfen. Wenn nicht, könnten genauere Informationen über das System, auf dem Sie bash ausführen, hilfreich sein.

0

Eine Möglichkeit, ein ähnliches Verhalten zu reproduzieren:

$ alias echo='echo;' 
$ echo Hi 
Hi: command not found 
$ alias 
alias echo='echo;' 
$ unalias echo 
$ echo Hi 
Hi 
4

In einer Zeile:

echo $(echo "Hi my name is John" | awk '{print $3}')