(or "In dash, ... is not supported." when using
dash
)
#!/bin/sh
echo "Your initial is ${USER:0:1}"
Either switch to a shell that does support string indexing via
parameter expansion, like bash
or ksh
, or
rewrite with cut
:
#!/bin/sh
echo "Your initial is $(printf '%s' "$USER" | cut -c 1)"
To find the last argument passed to a shell script without using
bash’s ${@:$#}
- or ${@: -1}
-style string
indexing, use the following, which even “works
in the unix v7 bourne shell from 1979”:
#!/bin/sh
for argument in "$@"; do
: # `:`, also called as `true`, is a no-op here
done
printf '%s\n' "${argument-}"
String indexing is a bash and ksh extension, and does not work in
dash
or POSIX sh
.
If you only intend to target shells that supports this feature, you can change the shebang to a shell that guarantees support, or ignore this warning.
You can use # shellcheck disable=SC3000-SC4000
to ignore
all such compatibility warnings.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.