Bash Compound/Nested 条件运算符问题

Bash Compound/Nested Conditional Operator issue

我的 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
..

复合条件 copiedFlag || ( cp originalFile newFile && copiedFlag=true ) 不知何故不起作用。

但是如果我这样做,它会起作用: copiedFlag || cp originalFile newFile && copiedFlag=true

这是我逻辑中的重要一步,因此我想通过将其括在大括号中来确保我的分配是绝对正确的。为什么这不起作用?我做错了什么?

The compound condition copiedFlag || ( cp originalFile newFile && copiedFlag=true ) somehow doesn't work.

它不起作用,因为您正在分叉一个新的子 shell,并且对 copiedFlag 所做的更改在当前 shell 中不可见。

你真的不需要在这里生成子shell,只需使用大括号表达式{ ...; } as:

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