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

时间:2017-08-23 11:04:08

标签: bash operators

我有这样的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

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

1 个答案:

答案 0 :(得分:1)

  

复合条件copiedFlag || ( cp originalFile newFile && copiedFlag=true )以某种方式不起作用。

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

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

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