Mehrere mögliche Inhalte einer Variable mit If prüfen

Mr. Brooks

Lt. Commander
Registriert
Aug. 2011
Beiträge
1.441
Hi,

wenn ich in einem Script mit If prüfen will ob die Variable "$today" ein bestimmter Wochentag ist, kann ich das so machen

Code:
if [ "$today" = So ] || [ "$today" = Mo ] || [ "$today" = Di ] || [ "$today" = Mi ] || [ "$today" = Do ]; then

Geht das nicht auch kürzer mit regulären Ausdrücken? Ich hab schon Konstrukte mit

Code:
if [[ "$today" = So|Mo|Di|Mi|Do ]]; then

gesehen,m weiß aber nicht mehr ob das in diesem Zusammenhang war. Hier funktioniert das auf jeden Fall nicht. Ich nutze Bash.

Mr. Brooks
 
Wie wäre es mit der Umkehrung?
Also quasi nicht Freitag oder Samstag... Macht das ganze deutlich leserlicher... Oder Du arbeitest dich in Regular Expressions ein...

Edit: ghecko war schneller ;)
 
Bash:
if [ ["$today" = So  ||  "$today" = Mo ||  "$today" = Di  ||  "$today" = Mi  ||  "$today" = Do ]]; then
ist schonmal was kürzer

So geht was du vor hast: https://unix.stackexchange.com/questions/111508/bash-test-if-word-is-in-set
Bash:
if [[ "$WORD" =~ ^(cat|dog|horse)$ ]]; then
    echo "$WORD is in the list"
else
    echo "$WORD is not in the list"
fi


Ist if denn sicher wirklich was hier am Sinnvollsten ist?
Alternativ kannst du dir auch bspw. eine Contains function anlegen.
Bash:
contains() {
    [[ $1 =~ (^|[[:space:]])$2($|[[:space:]]) ]] && exit(0) || exit(1)
}
oder eine davon: https://stackoverflow.com/questions/3685970/check-if-a-bash-array-contains-a-value
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: ghecko
Soll das einfach nur kürzer sein im Sinne von weniger Zeilen/Zeichen? Oder "eleganter"?

Ich werfe einfach mal case in den Raum. Innerhalb des case kann man auch mit | arbeiten,
 
Zuletzt bearbeitet: (Link geändert)
madmax2010 schrieb:
Bash:
if [ ["$today" = So  ||  "$today" = Mo ||  "$today" = Di  ||  "$today" = Mi  ||  "$today" = Do ]]; then
ist schonmal was kürzer

Das geht, ich versteh aber nicht wieso das zwingend doppelte eckige Klammern drum müssen. Dachte doppelte Klammern sind nötig wenn man Regex verwendet, ist es hier ja aber nicht.

Code:
if [[ "$WORD" =~ ^(cat|dog|horse)$ ]]; then

Hier verstehe ich die doppelten Klammern, nicht aber das =~. Das heißt "beinhaltet". Bei mir passt das ja aber genau. Da steht nicht einfach "cat blabla" sondern "cat" (bzw. der Wochentag).
 
Zurück
Oben