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