Busybox ash (Almquist shell) shell and Debian dash (Debian Almquist shell) are lightweight Unix shell and they are a variant of System V.4 variant of the Bourne shell. Ash/dash shell is known to be very small and is used mainly in embedded (ash) devices and installation scripts (Debian/Ubuntu setup).
Unfortunately they do not support arrays, which could be really a problem in many cases. But we can simulate the arrays with eval function.
So if you need to write a ash/dash script let’s say for an installation script of Ubuntu or Debian or a script for an embedded device, which uses busybox or even you do not want to use arrays in bash, you can follow the consepts below – create variable with a “name” concatenated with a number.
1) Set a variable
It can be done with two ways:
for myi in 0 1 2 ; do setvar mvar$myi "Payload: $myi" done
for myi in 0 1 2 ; do eval mvar$myi=\"Payload: $myi\" done
This will create variables with names:
mvar1, mvar2, mvar3
and they can be used in any place of your script after the creation of the variables using “eval” or accessing them with the names.
* bash shell do not support the command “setvar”, so for bash scripts use only eval version.
2) Use a variable
- using “eval”
for myi in 0 1 2 ; do eval echo \$mvar$myi done myi=1 eval newvar="\$mvar$myi" echo $newvar
- direct access
echo $mvar2 $mvar2="Payload 20" echo $mvar2