Bash 复合/嵌套条件运算符问题



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

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

复合

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

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

您实际上不需要在此处生成子shell,只需使用大括号表达式{ ...; }为:

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

最新更新