arrays instead of strings

int comparisons with `-eq` or `-ne` and without quotes
`do ${var}` without quotes
This commit is contained in:
Jack
2021-10-14 00:30:09 +03:00
committed by GitHub
parent 0ded89a78a
commit 2d8c227a50
+27 -54
View File
@@ -2,7 +2,7 @@
# Push-button installer of macOS on VirtualBox # Push-button installer of macOS on VirtualBox
# (c) myspaghetti, licensed under GPL2.0 or higher # (c) myspaghetti, licensed under GPL2.0 or higher
# url: https://github.com/myspaghetti/macos-virtualbox # url: https://github.com/myspaghetti/macos-virtualbox
# version 0.99.1.3 # version 0.99.1.4
# Dependencies: bash coreutils gzip unzip wget xxd dmg2img # Dependencies: bash coreutils gzip unzip wget xxd dmg2img
# Optional features: tesseract-ocr tesseract-ocr-eng # Optional features: tesseract-ocr tesseract-ocr-eng
@@ -205,6 +205,9 @@ if [[ -n "$(gcsplit --help 2>/dev/null)" ]]; then
function seq() { function seq() {
gseq "$@" gseq "$@"
} }
function sort() {
gsort "$@"
}
fi fi
} }
@@ -1096,20 +1099,12 @@ fi
function and_all_subsequent_stages() { function and_all_subsequent_stages() {
# if exactly two arguments were specified on the command line, and the first is a stage title, # if exactly two arguments were specified on the command line, and the first is a stage title,
# then perform all stages subsequent to the specified stage, otherwise do nothing. # then perform all stages subsequent to the specified stage, otherwise do nothing.
if [[ ${#specified_arguments[@]} == 2 ]]; then [[ ${#specified_arguments[@]} -ne 2 ]] && return
local stage
local first_argument=${specified_arguments[0]}
local run=n
for stage in "${stages[@]}"; do for stage in "${stages[@]}"; do
[[ $run == n ]] || "$stage" [[ "${stages[0]}" = "${specified_arguments[0]}" ]] && break
stages=( "${stages[@]:1}" )
if [[ $stage == "$first_argument" ]]; then
# Run all subsequent stages.
run=y
fi
done done
fi for stage in "${stages[@]:1}"; do ${stage}; done
} }
function documentation() { function documentation() {
@@ -1713,19 +1708,6 @@ stages=(
prompt_delete_temporary_files prompt_delete_temporary_files
) )
if [[ $# == 0 ]]; then
for stage in "${stages[@]}"; do
"$stage"
done
exit
fi
if [[ $1 == documentation ]]; then
documentation
exit
fi
other_commands=( other_commands=(
check_shell check_shell
troubleshoot troubleshoot
@@ -1733,36 +1715,27 @@ other_commands=(
and_all_subsequent_stages and_all_subsequent_stages
) )
# script called without arguments
[[ $# -eq 0 ]] && for stage in "${stages[@]}"; do ${stage}; done && exit
# first argument is "documentation"
[[ "${1}" == "documentation" ]] && documentation && exit
specified_arguments=("$@") # this variable is used in the function "and_all_subsequent_stages" specified_arguments=("$@") # this variable is used in the function "and_all_subsequent_stages"
for specified_arg; do sorted_unique_recognized_arguments="$( printf "%s\n" ${stages[@]} ${other_commands[@]} | sort -bu )"
there_is_a_match=n sorted_unique_recognized_and_specified_arguments="$( printf "%s\n" ${stages[@]} ${other_commands[@]} $@ | sort -bu )"
for valid_arg in "${stages[@]}" "${other_commands[@]}"; do # if a specified argument is different from any recognized argument
if [[ $valid_arg == "$specified_arg" ]]; then if [[ "${sorted_unique_recognized_and_specified_arguments}" != "${sorted_unique_recognized_arguments}" ]]; then
there_is_a_match=y echo -e "\nOne or more specified arguments is not recognized."
break echo -e "\nRecognized stages:\n"
fi printf ' %s\n' "${stages[@]}"
done echo -e "\nOther recognized arguments:\n"
printf ' %s\n' "${other_commands[@]}"
if [[ $there_is_a_match == n ]]; then echo -e "\nView documentation by entering the following command:"
cat <<EOF would_you_like_to_know_less
One or more specified arguments is not recognized.
Recognized stages:
$(printf ' %s\n' "${stages[@]}")
Other recognized arguments:
$(printf ' %s\n' "${other_commands[@]}")
View documentation by entering the following command:
$(would_you_like_to_know_less)
EOF
exit exit
fi fi
done
check_gnu_coreutils_prefix check_gnu_coreutils_prefix
set_variables set_variables
check_dependencies check_dependencies
for argument; do "${argument}"; done for argument; do ${argument}; done