Wenn Sie sicher, dass Status sind nur eine Zeile sein, könnten Sie so etwas wie dies mit sed tun:
status=$(echo "$status" | sed -e 's:^foo$:bar:' -e 's:^baz$:buh:')
Sie können auch in der Lage sein, etwas zu bekommen, mit bash eingebautem Ersatz zu arbeiten. Diese fast Werke (ich weiß nicht von irgendeiner Weise nur zu bekommen genau passend):
status=${status/foo/bar}
status=${status/baz/buh}
Wenn Ihr Ziel ist nur mehr „funktional“ zu sein (und nicht Ihren Code Typo sicher zu machen), können Sie dies tun:
status=$(
case "$status" in
("foo") echo "bar" ;;
("baz") echo "buh" ;;
(*) echo "$status" ;;
esac)
Obwohl ehrlich gesagt, ist bash wahrscheinlich eine der schlimmsten Sprachen zu versuchen und funktional zu sein, es war wirklich eine zwingende Mentalität entwickelt, durch die Tatsache verdeutlichte, wie Sie können. Komponieren Sie keine Ausdrücke. Sehen Sie im zweiten Codefragment, wie ich es in zwei separate Anweisungen aufteilen musste? Wenn bash entworfen wurde funktional sein würden Sie in der Lage sein, so etwas wie diese, anstatt zu schreiben:
status=${{status/baz/buh}/foo/bar}
Aber das tut nicht Arbeit.
Ich würde vorschlagen, nur Bash für einfachere Skripte zu verwenden, und für kompliziertere Dinge verwenden Sie etwas wie Python oder Ruby. Sie werden Ihnen mehr Funktionscode schreiben lassen, ohne ständig mit der Sprache ringen zu müssen.
sind Sie wollen nur eine Funktion schreiben? – thecoshman
Wenn Sie Angst vor Tippfehlern haben, verwenden Sie ['set -u'] (https://sipb.mit.edu/doc/safe-shell/) am Anfang Ihres Programms. – ceving