Jeśli użyję pojedynczych cudzysłowów, aby załączyć instrukcję akcji awk, działa ona zgodnie z oczekiwaniami:
$ dpkg -l | grep "linux\-[a-z]*\-" | awk {'print $2'}
linux-headers-3.13.0-27
linux-headers-3.13.0-27-generic
linux-headers-3.14.4-031404
linux-headers-3.14.4-031404-generic
linux-headers-generic
linux-image-3.13.0-27-generic
linux-image-3.14.4-031404-generic
linux-image-extra-3.13.0-27-generic
linux-image-generic
linux-libc-dev:i386
linux-sound-base
Ale jeśli użyję podwójnych cudzysłowów, aby je zawrzeć, wypisze całą linię zamiast określonej kolumny / pola:
$ dpkg -l | grep "linux\-[a-z]*\-" | awk {"print $2"}
ii linux-headers-3.13.0-27 3.13.0-27.50 all Header files related to Linux kernel version 3.13.0
ii linux-headers-3.13.0-27-generic 3.13.0-27.50 i386 Linux kernel headers for version 3.13.0 on 32 bit x86 SMP
ii linux-headers-3.14.4-031404 3.14.4-031404.201405130853 all Header files related to Linux kernel version 3.14.4
ii linux-headers-3.14.4-031404-generic 3.14.4-031404.201405130853 i386 Linux kernel headers for version 3.14.4 on 32 bit x86 SMP
ii linux-headers-generic 3.13.0.27.33 i386 Generic Linux kernel headers
ii linux-image-3.13.0-27-generic 3.13.0-27.50 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
ii linux-image-3.14.4-031404-generic 3.14.4-031404.201405130853 i386 Linux kernel image for version 3.14.4 on 32 bit x86 SMP
ii linux-image-extra-3.13.0-27-generic 3.13.0-27.50 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
ii linux-image-generic 3.13.0.27.33 i386 Generic Linux kernel image
ii linux-libc-dev:i386 3.13.0-27.50 i386 Linux Kernel Headers for development
ii linux-sound-base 1.0.25+dfsg-0ubuntu4 all base package for ALSA and OSS sound systems
Dlaczego tak jest Dlaczego użycie podwójnych cudzysłowów w celu zawarcia instrukcji akcji awk daje inne wyniki niż użycie pojedynczych cudzysłowów w celu ich zawarcia? Czy mogę zrobić coś, aby dołączanie za pomocą podwójnych cudzysłowów działało jak załączanie za pomocą pojedynczych cudzysłowów?
command-line
awk
Aditya
źródło
źródło
awk
powinny znajdować się wewnątrz{ ... }
.awk 'condition1{action1} condition2 {action2}'
. Jeśli wydamy polecenie awk w tenawk '{print $1}'
sposób, oznacza to, że nie ma żadnego warunku.awk {'print $2'}
jest złe. Powiedziałem, że lepiej byłoby unikać pojedynczych cudzysłowów w nawiasach klamrowych, ponieważ będzie to mylące.Odpowiedzi:
Jeśli użyjesz podwójnych cudzysłowów,
$2
zostanie wcześniej zastąpiony przez powłokęawk
. Jak$2
zwykle działa pustojest taki sam jak bieganie
Posługiwać się
jeśli chcesz użyć podwójnych cudzysłowów.
źródło
$2
zostać rozwinięty? (Ponieważ próbuję się uczyć, chciałbym zrozumieć, co się dzieje) :)$2
?$2
zwykle jest to pusta zmienna środowiskowa