Ihr Skript (mit einfachen Anführungszeichen um den awk-Skript) wird wie erwartet:
$ cat script-single
#!/bin/bash
line="foo bar"
echo $line | awk '{print $1}'
$ ./script-single test
foo
Die folgende jedoch wird Pause (das Skript gibt eine leere Zeile):
$ cat script-double
#!/bin/bash
line="foo bar"
echo $line | awk "{print $1}"
$ ./script-double test
Beachten Sie die Anführungszeichen um das awk
Programm.
Da die doppelten Anführungszeichen die $1
Variable erweitern, wird der awk Befehl bekommt das Skript {print test}
, die den Inhalt des awk-Variable druckt test
(die leer ist). Hier ist ein Skript, das zeigt, dass:
$ cat script-var
#!/bin/bash
line="foo bar"
echo $line | awk -v test=baz "{print $1}"
$ ./script-var test
baz
Related reading: Bash Reference Manual - Quoting und Shell Expansions
Es wird nicht ersetzt werden. Es wird das erste Wort in '" $ line "' – user000001
Der eigentliche Zweck dieser einfachen Anführungszeichen um das 'awk'" Programm "ist, sicherzustellen, dass bash nicht versucht, irgendeine Parametererweiterung durchzuführen, also wird Ihr Skript als funktionieren erwartet. –
@CostiCiudatu das Wort ist Erweiterung – SheetJS