代码之家  ›  专栏  ›  技术社区  ›  Dennis

Mac shell脚本-直接使用来自条件检查的布尔值

  •  0
  • Dennis  · 技术社区  · 11 年前

    我正在编写一个shell脚本来切换Mac OSX Mountain Lion上隐藏文件的显示。但在四处搜索后,我找不到答案:是否可以直接使用条件表达式的布尔值?例如,在java中,我会这样做 print(1 == 0) 并得到结果 false 。如果可能的话,怎么做?

    请注意,我并不是在要求我只能在谷歌上找到的“如果其他”方法。以下是我到目前为止写的当前脚本,第2行有问题。

    #!/bin/sh
    defaults write com.apple.Finder AppleShowAllFiles [$(defaults read com.apple.Finder AppleShowAllFiles) = 0]
    killall Finder && open /System/Library/CoreServices/Finder.app
    
    2 回复  |  直到 11 年前
        1
  •  0
  •   w00t    11 年前

    不,不可能直接。

    你可以做一些愚蠢的事情

    #!/bin/sh
    defaults write com.apple.Finder AppleShowAllFiles $(defaults read com.apple.Finder AppleShowAllFiles | grep -q 0 && echo true || echo false)
    killall Finder && open /System/Library/CoreServices/Finder.app
    

    但最好只使用if..然后或开关:

    #!/bin/sh
    case "$(defaults read com.apple.Finder AppleShowAllFiles)" in
      1) val=true ;;
      *) val=false ;;
    esac
    defaults write com.apple.Finder AppleShowAllFiles $val
    killall Finder && open /System/Library/CoreServices/Finder.app
    
        2
  •  0
  •   Dennis    11 年前

    在我发现“expr”命令后,我刚刚找到了这个问题的解决方案。这实际上是可能的。 expr $(commandToCheck) = $(valueToCheckAgainst) 如果为true,则返回1的标准输出,如果为false,则返回0的标准输出。

    我已将代码更新为以下内容:

    defaults write com.apple.Finder AppleShowAllFiles $(expr $(defaults read com.apple.Finder AppleShowAllFiles) = 0)