Skip to content
John Gardner edited this page Dec 22, 2021 · 2 revisions

\t is just literal t here. For tab, use "$(printf '\t')" instead.

Problematic code:

# Want tab
var=foo\tbar

or

# Want linefeed
var=foo\nbar

Correct code:

var="foo$(printf '\t')bar"  # As suggested in warning
var="$(printf 'foo\tbar')"  # Equivalent alternative

or

# Literal, quoted linefeed
line="foo
bar"

Rationale:

ShellCheck has found a \t, \n or \r in a context where they just become regular letters t, n or r. Most likely, it was intended as a tab, linefeed or carriage return.

To generate such characters (plus other less common ones including \a, \f and octal escapes) , use printf as in the example. The exception is for linefeeds that would be stripped by command substitution; in these cases, use a literal quoted linefeed instead.

Other characters like \z generate a SC1001 info message, as the intent is less certain.

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 guerraart8 to find a specific , or see Checks.

Clone this wiki locally