2017-09-19 92 views
0

每當我想檢查shell環境中是否存在路徑,無論是交互式還是腳本,我都使用 [ -L "${PATH_TO_CHECK}" ] || ([ ! -L "${PATH_TO_CHECK}" ] && [ -e "${PATH_TO_CHECK}" ]。一個破碎的符號鏈接仍然是我現有的一條路徑。我試圖找出如何檢查相反的,但我不能想象任何簡單的比! ([ -L "${PATH_TO_CHECK}" ] || ([ ! -L "${PATH_TO_CHECK}" ] && [ -e "${PATH_TO_CHECK}" ])。這張支票不可縮減嗎?在shell腳本中簡化對路徑不存在的檢查

回答

1

答案:

!(a || (!a && b))  
!a && !(!a && b)  # De Morgan's law 
!a && (a || !b)   # De Morgan's law again 
(!a && a) || (!a && !b) # Distributive law 
!a && !b    # Complement law 

(獎金:適用德·摩根再次找到你的原始表達式可以簡化爲a || b

答案:

只要網站不是一個現有的文件,也沒有一個鏈接:

[ ! -e "$path" ] && [ ! -L "$path" ]