/ / Problem Bash Compound / Nested Conditional Operator - bash, operatory

Problem Bash Compound / Nested Conditional Operator - bash, operatory

Mam taki kod Bash:

copiedFlag=false
..
if [...]
cp originalFile newFile && copiedFlag=true
fi
..
if[....]
copiedFlag || ( cp originalFile newFile && copiedFlag=true )
fi
..

if [ copiedFlag == true ]; then
cp newFile originalFile
fi
..

Warunek złożony copiedFlag || ( cp originalFile newFile && copiedFlag=true ) jakoś nie działa.

Ale jeśli to zrobię, to działa: copiedFlag || cp originalFile newFile && copiedFlag=true

Jest to ważny krok w mojej logice, dlatego chcę mieć pewność, że moje zadanie jest całkowicie poprawne, załączając je w nawiasy klamrowe. Dlaczego to nie działa? Co ja robię źle?

Odpowiedzi:

1 dla odpowiedzi № 1

Warunek złożony copiedFlag || ( cp originalFile newFile && copiedFlag=true ) jakoś nie działa.

Nie działa, ponieważ tworzysz nową podpowłokę i wprowadzasz zmiany copiedFlag nie są widoczne w bieżącej powłoce.

Naprawdę nie musisz tutaj tworzyć podpowłoki, po prostu użyj wyrażenia nawiasowego { ...; } tak jak:

"$copiedFlag" || { cp originalFile newFile && copiedFlag=true; }