2017-08-23 3 views
1

私はこのように私の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

: '$ copiedFlag || (cp originalFile newFile && copiedFlag = true) ' – Leon

+0

代入の外のどこでも' copiedFlag'を参照解除/展開しなければなりません。したがって 'if [$ copiedFlag == true]; then ... ... ' – Leon

答えて

1

どういうわけか、化合物の状態copiedFlag || (cp originalFile newFile && copiedFlag=true)は機能しません。

新しいサブシェルをフォークしていて、copiedFlagの変更が現在のシェルでは表示されないため、機能しません。

あなたは本当にとしてだけブレース表現{ ...; }を使用し、ここでサブシェルを起動する必要はありません。私はあなたが `$`を逃したと思います

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

テストは '$': '$ copiedFlag || {cp originalFile newFile && copiedFlag = true; } ' – Leon

+0

ああもちろんです。それを修正するためにありがとう。 – anubhava

+1

素晴らしいAnubhava。私は$を入れていましたが、中括弧が勝者だと思います。 !まもなくそれを試して更新します。 – user1880957