From 2a43cfc864bef94d2c7045c03206ac7fe86d4ba7 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Thu, 19 Nov 2020 11:28:53 -0800 Subject: [PATCH] Created SC3003 (markdown) --- SC3003.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 SC3003.md diff --git a/SC3003.md b/SC3003.md new file mode 100644 index 0000000..88f36d5 --- /dev/null +++ b/SC3003.md @@ -0,0 +1,49 @@ +## In POSIX sh, $'..' is undefined. + +### Problematic code: + +```sh +#!/bin/sh +IFS=$' \t\n' +``` + +### Correct code: + +```sh +#!/bin/sh +# Note: \n can not be last, or it will be stripped by $() +IFS=$(printf ' \n\t') +``` + +or + +```sh +#!/bin/sh +# Trailing linefeed added literally +IFS="$(printf ' \t') +" +``` + +or + +```sh +#!/bin/bash +# Bash supports this +IFS=$' \t\n' +``` + +### Rationale: + +You are using the interpolated string Bashism `$'..'` in a script that declares itself as POSIX sh (e.g. via `#!/bin/sh`). + +To ensure the script runs correctly on other systems, either switch to Bash, or rewrite it in a POSIX compatible way. + +This can generally done via `printf` as in the example. Be careful about strings with trailing linefeeds, as a `$(command substitution)` will strip them. + +### Exceptions: + +None. + +### Related resources: + +* StackOverflow: [Why does my bash code fail when I run it with sh?](https://stackoverflow.com/questions/15179446/why-does-my-bash-code-fail-when-i-run-it-with-sh) \ No newline at end of file