You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
John Gardner edited this page Dec 22, 2021
·
8 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="foobar"
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!