Sie können die Argumentliste als Array mit separaten conditionals für jede Variable ein Teil der Liste erstellen (und nicht verschachtelten Bedingungen wie Sie haben). Dies ist sehr ähnlich zu Roland Illigs Antwort, nur dass die Verwendung eines Arrays anstelle einer Textvariablen mögliche Probleme mit lustigen Zeichen (wie Leerzeichen) in Argumenten vermeidet (siehe BashFAQ #050) - es wird hier wahrscheinlich nicht benötigt, aber ich bevorzuge es sicherer Weg, um Überraschungen später zu vermeiden. Beachten Sie auch, dass ich angenommen habe, dass die Argumente in einer bestimmten Reihenfolge sein müssen - wenn -disp
vor `refresh
gehen kann, dann können die "alle Versionen" Teile alle zusammen am Anfang zusammengestellt werden.
# Build the argument list, depending on a variety of conditions
arg_list=("-res" "$2" "$3") # all versions start this way
if [ "$7" = "allresolutions" ]; then
# allresolutions include the refresh rate parameter to be passed
arg_list+=("-refresh" "$4")
fi
arg_list+=("-disp" "$5") # all versions need the disp value
if [ "$6" = "nooptions" ]; then
: # nothing to add
elif [ "$6" = "vcaa" ]; then
arg_list+=("-vcaa" "5")
elif [ "$6" = "fsaa" ]; then
arg_list+=("-fsaa" "4")
elif [ "$6" = "vcfsaa" ]; then
arg_list+=("-vcaa" "5" "-fsaa" "4")
fi
if [ "$1" != "gears" ]; then
# ctree has time-to-run passed as parameter to account for suitable time for
# logging fps score. If bubble fps capture strategy is different from ctree,
# then this if statement has to be modified accordingly
arg_list+=("-sec" "$8")
fi
# Now actually run it
./"$1" "${arg_list[@]}" &>> ~/fps.log
was hast du an den Händen? – ajreal