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
Simon Brandt edited this page Feb 19, 2025
·
2 revisions
In POSIX sh, arrays are undefined.
Problematic code:
#!/bin/sh
x=( foo bar "Hello World" )
forwordin"${x[@]}"do
touch "$word.dat"done
Correct code:
Consider switching to a shell that does support arrays, such as bash or ksh, by changing the shebang.
Alternatively, if you only need a single array at a time, you may be able to rewrite to use the positional parameters:
set -- foo bar "Hello World"forwordin"$@"do
touch "$word.dat"done
or strings with carefully chosen delimiters:
x='foobarHello World'printf'%s'"$x"|while IFS=''read -r word
do
touch "$word.dat"done
Rationale:
Arrays are specific to Bash and Ksh, but you are using them in a script declared to run with sh or dash. These shells do not support arrays at all. You should either switch to Bash/Ksh, or rewrite the script to not use arrays.
There are no great replacements, especially none that can be mechanically applied, but using the positional parameters or a delimited string works in many cases, as shown in the examples.
Exceptions:
None.
Related resources:
Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!