1 SC1143
Vidar Holen edited this page 2021-03-20 19:08:59 -07:00

This backslash is part of a comment and does not continue the line.

Problematic code:

sed \
  -e "s/HOST/$HOSTNAME/g"   \
# -e "s/USER/$USER/g"       \
  -e "s/ARCH/$(uname -m)/g" \
  "$buildfile"

Correct code:

sed \
  -e "s/HOST/$HOSTNAME/g"   \
  -e "s/ARCH/$(uname -m)/g" \
  "$buildfile"

# This comment is moved out:
# -e "s/USER/$USER/g"       \

or using backticked, inlined comments:

sed \
  -e "s/HOST/$HOSTNAME/g"   \
`# -e "s/USER/$USER/g"`     \
  -e "s/ARCH/$(uname -m)/g" \
  "$buildfile"

(ShellCheck recognizes this idiom and does not suggest quotes or $(), neither of which would have worked)

Rationale:

ShellCheck found a line continuation followed by a commented line that appears to try to do the same.

Backslash line continuations are not respected in comments, and the line instead simply terminates. This is a problem when commenting out one line in a multi-line command like the example.

Instead, either move the line away from its statement, or use an `# inline comment` in an unquoted backtick command substitution.

Exceptions:

None.

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!