Perché usare le virgolette per racchiudere le istruzioni di azione di awk produce risultati diversi rispetto a quando si usano virgolette singole per racchiuderle?

7

Se utilizzo le virgolette singole per racchiudere la dichiarazione di azione di awk, funziona come previsto:

$ dpkg -l | grep "linux\-[a-z]*\-" | awk {'print '}
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

Ma se uso le virgolette per racchiuderle, stampa l'intera riga invece della particolare colonna / campo:

$ dpkg -l | grep "linux\-[a-z]*\-" | awk {"print "}
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

Perché è così? Perché usare le virgolette per racchiudere le dichiarazioni di azione di awk produce risultati diversi rispetto a quando si usano virgolette singole per racchiuderle? Posso fare qualcosa in modo che racchiudere le virgolette funzioni come racchiudere le virgolette singole?

    
posta Aditya 01.06.2014 - 14:26

1 risposta

5

Se utilizzi virgolette doppie, il viene sostituito dalla shell prima che venga chiamato awk . Poiché è in genere vuoto in esecuzione

awk {"print "}

è uguale a quello in esecuzione

awk {"print "}

Usa

awk {"print $2"}

se vuoi usare le virgolette doppie.

    
risposta data Florian Diesch 01.06.2014 - 14:36

Leggi altre domande sui tag