Eu não entendo o que é um único backtick e aspas duplas e faço neste script

6

Este exemplo estava no meu livro para iniciantes em Linux:

$ cat sort-wc
#!/bin/bash
# Sort files according to their line count
for f
do
    echo 'wc -l <"$f» lines in $f
done | sort -n
$ ./sort-wc /etc/passwd /ect/fstab /etc/motd

O que eu não entendo é porque existe apenas um único backtick, uma aspa simples e o que o >> faz. Não é >> para gravar em um arquivo?

    
por user284179 03.04.2018 / 19:48

1 resposta

27

Esta é a partir da página 121 de "Introdução ao Linux para Usuários e Administradores " e isso é um erro tipográfico no texto. O script também está disponível em outros textos da tuxcademy, com o mesmo erro tipográfico.

O único caractere » não é o mesmo que o duplo >> e não serve para nenhum propósito em um script de shell. Meu palpite é que o sistema de formatação usado para formatar o texto do livro ficou confuso com "' por algum motivo e formatou como um guillemet (ângulo-citação), ou é apenas um erro de digitação (as «...» são usadas para citar texto comum em outras partes do documento).

O script deve ser lido

#!/bin/bash
# Sort files according to their line count
for f
do
    echo 'wc -l <"$f"' lines in $f
done | sort -n

... mas seria melhor escrito

#!/bin/sh
# Sort files according to their line count

for f; do
    printf '%d lines in %s\n' "$(wc -l <"$f")" "$f"
done | sort -n

Os backticks são uma forma mais antiga de $( ... ) e printf é melhor para usar na saída de dados variáveis. Além disso, as expansões de variáveis e as substituições de comandos devem ser citadas, e o script não usa nenhum recurso bash para que possa ser executado por /bin/sh .

Relacionados:

por 03.04.2018 / 19:55