我有这样的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
这是我逻辑中的重要一步,因此我想通过将其括在括号中来确保我的作业绝对正确。为什么这不起作用?我做错了什么?
答案 0 :(得分:1)
复合条件
copiedFlag || ( cp originalFile newFile && copiedFlag=true )
以某种方式不起作用。
它不起作用,因为您正在分支新的子shell,并且对copiedFlag
所做的更改在当前shell中不可见。
你真的不需要在这里产生一个子shell,只需使用大括号表达式{ ...; }
:
"$copiedFlag" || { cp originalFile newFile && copiedFlag=true; }