Skip to content
Vidar Holen edited this page Mar 21, 2021 · 1 revision

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.

Related resources:

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

ShellCheck

Each individual ShellCheck warning has its own wiki page like SC1000. Use GitHub Wiki's "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally