nsh
nsh copied to clipboard
Add POSIX parameter expansions and initialization
For validation, we could use something like grok.sh
or https://stackoverflow.com/a/67261832.
Run code as nsh -c '<code>'
, e.g.: nsh -c 'var='
.
Features
-
[ ] Empty variable assignment
#!/bin/sh var=
nsh: parse error: --> 2:5 | 2 | var=␊ | ^--- | = expected literal_span, tilde_span, any_string_span, any_char_span, command_span, proc_subst_direction, backtick_span, expr_span, param_ex_span, param_span, double_quoted_span, single_quoted_span, or initializer
Notice how ␊
is shown when there's a newline.
-
[ ] Default value substitution with whitespace
echo "${var:- }"
nsh: parse error: --> 1:14 | 1 | echo "${var:- }" | ^--- | = expected word
-
[ ] Default value initialization
: "${var:=def}"
nsh: command not found `:'
-
[ ] Get name without extension
echo ${FILENAME%.*}
nsh: parse error: --> 1:16 | 1 | echo ${FILENAME%.*} | ^--- | = expected param_op
-
[ ] Get extension
echo ${FILENAME##*.}
nsh: parse error: --> 1:16 | 1 | echo ${FILENAME##*.} | ^--- | = expected param_op
-
[ ] Get directory name
echo ${PATHNAME%/*}
nsh: parse error: --> 1:16 | 1 | echo ${PATHNAME%/*} | ^--- | = expected param_op
-
[ ] Get file name
echo ${PATHNAME##*/}
nsh: parse error: --> 1:16 | 1 | echo ${PATHNAME##*/} | ^--- | = expected param_op
For reference, here is the expansion table:
parameter expansion | var set |
var empty |
var unset |
---|---|---|---|
${var-default} |
$var |
"" |
default |
${var=default} |
$var |
"" |
default |
${var?default} |
$var |
"" |
exit 127 |
${var+default} |
default |
default |
"" |
${var:-default} |
$var |
default |
default |
${var:=default} |
$var |
default |
default |
${var:?default} |
$var |
exit 127 |
exit 127 |
${var:+default} |
default |
"" |
"" |
For POSIX parameter expansion, see: POSIX.1-2017: Parameter Expansion.
For other applications of parameter expansion, see: The Bash Hackers Wiki: Parameter Expansion.
For a more historical reference, see: The Traditional Bourne Shell Family.