Qual shell você está usando para este script? Eu suponho que seja / bin / sh
A única entidade semelhante a um array que você tem em um shell POSIX são os parâmetros posicionais. Você poderia fazer isso:
set -- # clear the positional parameters
for param in "$param1" "$param2" "$param3" "$param4"; do
if [ -n "$param" ]; then
# append this param to the positional params
set -- "$@" "$param"
fi
done
# invoke the command with the positional params, properly quoted
cmd "$@"
Se você quiser ser mais inteligente, envolva a invocação de cmd em uma função:
invoke_cmd() {
n="$#" # remember the original number of params
# append to the args list only if non-empty
for arg; do [ -n "$arg" ] && set -- "$@" "$arg"; done
# discard the original params (including the empty ones)
shift "$n"
# and invoke the cmd
cmd "$@"
}
invoke_cmd "$param1" "$param2" "$param3" "$param4"
Para o bash real, simplifique
invoke_cmd() {
local args=()
for arg; do [[ "$arg" ]] && args+=("$arg"); done
cmd "${args[@]}"
}
invoke_cmd "$param1" "$param2" "$param3" "$param4"