-
Notifications
You must be signed in to change notification settings - Fork 34
Open
Description
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.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels