A causa
Primeiramente, vamos dar uma olhada na página de manual do bash:
A non-quoted backslash () is the escape character. It preserves the literal value of the next character that follows, with the exception of . If a \<newline> pair appears, and the backslash is not itself quoted, the \<newline> is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).
Então, quando você usa \
antes de um <newline>
, ele trata como uma continuação de linha. Mas no seu segundo script, a continuação do seu código após A=blank.pdf
é um comentário, e como \
após B=blank.pdf
também faz parte do seu comentário, ele não causa continuação de linha. Como resultado, o restante do seu script será tratado como outro comando exclusivo. Então o bash vai pensar no seu script como algo assim:
#!/bin/sh
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
pdftk A=blank.pdf # B=blank.pdf \
C=blank.pdf cat A C output foo.pdf
Aqui, você provavelmente receberá um erro dizendo algo como C=blank.pdf: command not found
.
Backticks para o resgate!
No entanto, você pode usar comentários entre suas continuações de linha, usando o recurso de substituição de comandos de backticks, como este:
#!/bin/sh
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
pdftk \
A=blank.pdf \
'# B=blank.pdf' '#You added left-side comment and I added this comment and everything is awesome' \
C=blank.pdf \
cat A C \
output foo.pdf
Esta não é a minha ingenuidade. É Marwan Alsabbagh . Veja o seguinte link para mais detalhes:
Como colocar um comentário de linha para um Multi- linha de comando